【发布时间】:2020-12-23 00:09:05
【问题描述】:
我有一个包含键和值的更改值数组。所以想法是遍历它并根据键名更新新值。但问题是我不知道密钥属于哪个深度。我想可能有一些使用 lodash 的解决方案,但我不知道是哪一个。无论如何,除了我最初的尝试之外,可能还有更好的方法,欢迎提出任何建议。谢谢
function updateNestedObj({ obj, nodeId, value, accumulator}){
Object.keys(obj).forEach(key => {
let oldVal = obj[key]
accumulator[nodeId] = value
const hasChild = typeof oldVal === 'object'
if (hasChild)
accumulator[nodeId] = updateNestedObj({ obj: oldVal,
nodeId, value, accumulator })
})
}
let changedNodes = [
{ id: 'grand_child_1', value: 'new grand_child_1 value' },
{ id: 'node_child_1', value: 'new node_child_1 value' },
]
let objToBeUpdated = {
root_node: {
node_child: {
grand_child: 'grand_child value',
grand_child_1: 'grand_child_1 value',
},
node_child_1: 'node_child_1 value',
},
}
let accumulator = {}
let result= {}
changedNodes.forEach(node => {
updateNestedObj({
obj: objToBeUpdated,
nodeId: node.id,
value: node.value,
accumulator: accumulator,
})
})
result.root_node=accumulator
console.log(result)
预期结果应如下所示:
{
root_node: {
node_child: {
grand_child: 'grand_child value',
grand_child_1: 'new grand_child_1 value',
},
node_child_1: 'new node_child_1 value',
},
}
【问题讨论】:
-
changedNodes.forEach(node => { ...(第 16 行)中的let obj = { ...(第 17 行)有什么用处? -
哦,它应该更好地命名该变量。它应该是其值会发生变化的对象。
-
我是这么认为的,但是为什么它是
forEach回调的一部分 -
哦该死,是的,它应该在循环之外
标签: javascript arrays recursion data-structures tree