如何将数组连接到对象数组中的数组?

时间:2017-01-13 18:36:34

标签: javascript arrays

我试图将一个数组连接到一个对象数组中的数组(productsCategories)。

所以,这里是productCategories数组的样子:

[
  {
    id: 123,
    items: [ { Obj1 }, { Obj2 } ]
  },
  {
    id:456,
    items: [ { Obj1 }, { Obj2 } ]
  }
]

我有一些新的数组,例如[ { Obj3 }, { Obj4 } ]concat productCategories id = 123对象find

所以要做到这一点,

我首先使用lodash的concat找到要更新的正确对象,并使用let nextItems:any = find(productCategories, { id: payload.id }); nextItems = assign({}, nextItems, { items: nextItems.items.concat(payload.items)}); 加入这两个数组:

nextItems.items

因此,productCategories具有连接的项目数组。

但是,我现在将其添加到id数组时遇到问题。我需要找到nextItems.idproductCategories.items相同的对象,然后将nextItems.items设置为driver.Navigate().GoToUrl("http://url.here")

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

找到与nextItems.id中的productCategories匹配的对象的索引,并为其分配新的连接数组。您可以使用lodash findIndex() 方法查找与id匹配的对象的索引。

var index = _findIndex(productCategories, { id: nextItems.id });
productCategories[index].items = nextItems.items;

答案 1 :(得分:1)

您也可以使用纯JavaScript。使用ES6扩展语法,它看起来像这样:

productCategories.filter(x => x.id == payload.id)
                 .forEach(x => x.items.push(...payload.items));

以下是包含示例数据的代码段:

// Sample data
var productCategories = [{
    id: 123,
    items: [ { a: 1 }, { a: 2 } ]
}, {
    id: 456,
    items: [ { b: 1 }, { b: 2 } ]
}];

var payload = {
    id: 123,
    items: [ { c: 1 }, { c: 2 } ]
};

// Update with payload
productCategories.filter(x => x.id == payload.id)
                 .forEach(x => x.items.push(...payload.items));

// Show results
console.log(productCategories);
.as-console-wrapper { max-height: 100% !important; top: 0; }