javascript - React - 使用键名从父对象中删除子对象
问题描述
我正在尝试从父对象中过滤掉不需要的对象
但是我被抛出一个错误TypeError: Cannot delete property 'children' of #<Object>
像这样传递的道具:
<Column df={["between", "mt-0", "around"]} xl={["center"]}>...</Column>
给定一个像这样的效用函数:
const Column = props => {
const x = filterComponentProps(props)
return stuff
}
实用功能内部对象中不匹配的任何内容const condition = ["df", "xl"]
都将被删除。
export const filterComponentProps = props => {
let data = props
console.log(data)
// {df: Array(3), xl: Array(1), children: Array(6)}
// children: (6) [{…}, {…}, {…}, {…}, {…}, {…}]
// df: (3) ["between", "mt-0", "around"]
// xl: ["center"]
const condition = ["df", "xl"]
Object.keys(data).forEach(key =>
!condition.includes(key) ? delete data[key] : key
) //ERROR
return data
}
我设置了一个测试,看看它是否是函数的问题,但它按预期工作:
const data = {
df: { name: "Part 1", size: "20", qty: "50" },
xl: { name: "Part 2", size: "15", qty: "60" },
children: { name: "Part 2", size: "15", qty: "120" },
}
const condition = ["df", "xl"]
Object.keys(data).forEach(key =>
!condition.includes(key) ? delete data[key] : key
)
console.log(data)
//{df: {…}, xl: {…}}
//df: {name: "Part 1", size: "20", qty: "50"}
//xl: {name: "Part 2", size: "15", qty: "60"}
解决方案
您收到此错误是因为您尝试修改被冻结的对象。如果您尝试以下操作
const data = Object.freeze({
df: { name: "Part 1", size: "20", qty: "50" },
xl: { name: "Part 2", size: "15", qty: "60" },
children: { name: "Part 2", size: "15", qty: "120" },
})
你得到同样的错误。让我知道是否清楚。
推荐阅读
- wpf - 具有已定义列和行的网格的 WPF 样式?
- hyperledger-fabric - Hyperledger Fabric:Java 类中的对等链码实例化错误
- javascript - 如何将二进制流转换为其十六进制表示(或 UTF8)
- r - 如何根据另一个数据框更新一个数据框中的列?
- css - 响应式html:包装时在主列中的元素之间放置侧列
- reactjs - 与 chrome 和 safari 相比,firefox 滚动到动画非常滞后
- javascript - 如何解决 Ramda reduce 函数的错误返回结果(javascript)
- python - 无法使用 Python 将 CSV 数据导入 MySQL 数据库
- python-3.x - 麻烦预处理图像以使文本更清晰以准备提取
- java - 为什么我会得到,我该如何解决这个“字符串到对象类型
“ 错误