2017-01-13 6 views
0

オブジェクトの配列内の配列(productsCategories)に配列を連結しようとしています。オブジェクトの配列内にある配列に配列を連結するにはどうすればよいですか?

だから、ここproductCategories配列は次のようになります。

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

私はid = 123オブジェクトに対してproductCategoriesconcatにしたい[ { Obj3 }, { Obj4 } ]のようないくつかの新しい配列を、持っています。

だから、これを行うには、

私は最初の二つのアレイに参加するconcatを更新するための正しいオブジェクトを見つけることがlodashのfindを使用して使用しました:だから

let nextItems:any = find(productCategories, { id: payload.id }); 
nextItems = assign({}, nextItems, { items: nextItems.items.concat(payload.items)}); 

を、nextItems.itemsは、連結の項目がありますアレイ。

ただし、これをproductCategoriesアレイに追加することに問題があります。 idnextItems.idと同じであるオブジェクトを見つけて、productCategories.itemsnextItems.itemsに設定する必要があります。

これを行う正しい方法は何ですか?

答えて

2

nextItems.idに一致するオブジェクトのインデックスをproductCategoriesに見つけ、新しい連結配列を割り当てます。 lodash findIndex()メソッドを使用して、idに一致するオブジェクトのインデックスを見つけることができます。

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

感謝を!それはそれを更新するのに役立ちます:D – user1354934

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; }

+0

ありがとう!それは素晴らしいことです。とても有難い – user1354934

関連する問題