javascript - 更新嵌套数组中的多个对象

标签 javascript arrays angularjs lodash

我有一个多维对象数组:

var arr = [
  {
    id: '10c',
    name: 'item 1'
    children: [
      {id: '11v', name: 'Item 1 child 1'},
      {id: '12c', name: 'Item 1 child 2'}
    ]
  },
  {
    id: '13v',
    name: 'item 2'
    children: [
      {id: '26e', name: 'Item 2 child 1'},
      {id: '7a', name: 'Item 2 child 2'}
    ]
  }
]

和另一个数据对象:

var array = [
  {id: '12c', name: 'New name 1'},
  {id: '26e', name: 'New name 2'},
  {id: '11v', name: 'New name 3'},
];

如果我想根据array<中的id值更新arr中各个对象的name,最好的方法是什么?

arr 可能超过 2 层深,所以我希望能够做到这一点而不必嵌套多个 forEach

最佳答案

试试这个:

function update(items, id, name) {
    var item;
    for (var i = 0; i < items.length; i++) {
        item = items[i];
        if (item.id === id) {
            item.name = name;
            return;
        }
        if (item.children) {
             update(item.children, id, name);
        }
    }
}

然后:

update(arr, '11v', 'test');

通过数组更新:

array.forEach(function (item) {
    update(arr, item.id, item.name);
});

关于javascript - 更新嵌套数组中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340511/

相关文章:

angularjs - 如何使用 Protractor 向流量控制队列添加 promise ?

javascript - 计时器未使用clearInterval()重置

javascript - 使用 bootstrap/jQuery 修复了视口(viewport)中的页脚

c - 如果我在 if 语句中定义一个数组,那么内存会被分配吗?

javascript - 如何创建一个弹出窗口但不丢失以前的窗口

arrays - 在 shell 脚本中使用 awk 内的数组

java - 逆数组(Java)//逆数组(Java)

javascript - 引导混合 Angular 1+2 应用程序

javascript - 传单去除旧层

JavaScript:无法理解此 while 循环中的逻辑