【发布时间】:2021-09-29 08:47:23
【问题描述】:
const data = {
"desk": {
"drawer": "stapler"
},
"cabinet": {
"top drawer": {
"folder1": "a file",
"folder2": "secrets"
},
"bottom drawer": "soda"
},
"item" : [
{
"hello" : {
"world" : "isHere"
},
"test" : "1"
},
{
"hello" : {
"world" : "isHere2"
},
"test" : "2"
},
]
};
const iterate = (obj) => {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object') {
iterate(obj[key])
} else{
let value = obj[key];
let newObj = {[key]: value, 'style' : {backGroundColor : 'red'}};
delete obj[key];
Object.assign(obj, newObj);
}
})
}
iterate(data);
console.log(data)
我写了一个递归函数,它应该用我在参数中指定的对象替换每个键值对(不是属性!)。
但是,如果我在函数内部使用 array.forEach 循环,则传递的 obj 是 undefined。
我错过了什么?
示例
const iterate = (obj, newObj) => {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object') {
iterate(obj[key])
} else{
delete obj[key];
Object.assign(obj, newObj);
}
})
}
但是,如果我在 forEach 中定义对象,它会完美运行......
const iterate = (obj) => {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object') {
iterate(obj[key])
} else{
let value = obj[key];
// SEE HERE
let newObj = {[key]: value, 'style' : {backGroundColor : 'red'}};
delete obj[key];
Object.assign(obj, newObj);
}
})
}
为什么Object.keys(obj).forEach在第一个版本中看不到传递的参数? 解决办法是什么?
【问题讨论】:
-
请添加一些示例数据和预期结果。
-
@OriDrori 做到了。这是第二个版本,但是我想将一个新对象作为参数传递给函数,但是 .forEach 看不到范围。
-
第一个代码中没有
newObj的声明。value未使用。这是一个错字吗?我收到错误消息ReferenceError: newObj is not defined" -
@jabaa 是的,值已被删除。声明是什么意思?它作为参数给出,应该一直传递到我调用 Object.assign()
-
分配给
iterate的匿名函数有两个参数,但您总是用一个参数调用它。参数newObj始终为undefined。Object.assign(obj, newObj);始终是Object.assign(obj, undefined);
标签: javascript reactjs object scope