如何在Javascript中更新对象数组的嵌套对象?

时间:2019-06-17 23:41:26

标签: javascript redux

const testArr = [
    { id: 'aaa', 
      children: [ 
           { id: 'aaa-1', 
             children: [
                { id: 'aaa-1-1' }   
             ] 
           }, 
           { id: 'aaa-2'}
       ] 
    },
    { id: 'bbb' },
]

我要嵌套对象数组来管理我的redux存储。我想向对象添加新属性。让我们将children添加到id: aaa-2,该对象将在下面:

const testArr = [
    { id: 'aaa', 
      children: [ 
           { id: 'aaa-1', 
             children: [
                { id: 'aaa-1-1' }   
             ] 
           }, 
           { id: 'aaa-2',
             children: [{ someNewKey: 'someNewValue' }]
           }

       ] 
    },
    { id: 'bbb' },
]

有没有一种方法可以使用特定的key:value对来更新对象的嵌套级别?我尝试使函数起作用,但是效果不佳

我尝试了// ,但是在尝试进行内部更新时无法正常工作

const updateDeep = (arr, id, push) => {
    return arr.map(el => {
        if (el.id === id) {
             return Object.assign({}, el, { children: push }) 
            }
        else {
            if (el.children) {
                return updateDeep(el.children, id, push)
            } else {
                return el
            }
        }
    })
}

1 个答案:

答案 0 :(得分:0)

自己解决

function updateDeep(array, id, newObj) {
    array.some((o, i) => {
        var temp;
        if (o.id === id) {
            o.children = [...(o.children ? o.children : []), newObj]
        }
        if (temp = updateDeep(o.children || [], id, newObj)) {
            o.children = [...(o.children ? o.children : []), newObj]
        }
    });
}