[英]How i can merge this array of object?
我有這個對象數組:
let array1 = [{
id: 1,
code: 'wawa'
},
{
id: 2,
code: 'qwqw'
}]
let array2 = [{
id: 1,
code: 'ewew'
},
{
id: 3,
code: 'eee'
}]
let array3 = [{
id: 3,
code: 'ww'
},
{
id: 1,
code: 'ww'
},
{
id: 4,
code: 'q'
}
]
let arrayGeral = new Array()
arrayGeral.push(array1)
arrayGeral.push(array2)
arrayGeral.push(array3)
如何將 arrayGeral 中的對象合並為一個數組對象?
我可以使用 lodash 做我想做的事,但我無法以某種方式進行迭代並使此自動化:
let merged = _.merge(_.keyBy(array1, 'id'), _.keyBy(array2, 'id'))
merged = _.merge(_.keyBy(merged, 'id'), _.keyBy(array3, 'id'))
我假設您想將它們合並到 1 個數組而不按 id 分組。 如果是這種情況,您可以使用concat
將它們合並為 1 個數組,如下所示: mergedArray = array1.concat(array2, array3)
let array1 = [{ id: 1, code: 'wawa' }, { id: 2, code: 'qwqw' }] let array2 = [{ id: 1, code: 'ewew' }, { id: 3, code: 'eee' }] let array3 = [{ id: 3, code: 'ww' }, { id: 1, code: 'ww' }, { id: 4, code: 'q' } ] var concatArr = array1.concat(array2, array3); console.log(concatArr);
我想應該保留最后的值。 如果是這種情況,那么您必須反轉您的推送方式:
let arrayGeral = new Array();
arrayGeral.push(...array3);
arrayGeral.push(...array2);
arrayGeral.push(...array1);
現在你要做的就是使用_.uniqBy
lodash 函數:
_.uniqBy(arrayGeral, 'id');
let array1 = [ { id: 1, code: 'wawa' }, { id: 2, code: 'qwqw' } ]; let array2 = [ { id: 1, code: 'ewew' }, { id: 3, code: 'eee' } ]; let array3 = [ { id: 3, code: 'ww' }, { id: 1, code: 'ww' }, { id: 4, code: 'q' } ]; let arrayGeral = new Array(); arrayGeral.push(...array3); arrayGeral.push(...array2); arrayGeral.push(...array1); console.log(_.uniqBy(arrayGeral, 'id'));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
如果這是您的輸出:
[
{ id: 1, code: [ 'wawa', 'ewew', 'ww' ] },
{ id: 2, code: [ 'qwqw' ] },
{ id: 3, code: [ 'eee', 'ww' ] },
{ id: 4, code: [ 'q' ] }
]
然后參考下面的代碼:
let array1 = [{ id: 1, code: 'wawa'}, { id: 2, code: 'qwqw' }] let array2 = [{ id: 1, code: 'ewew'}, { id: 3, code: 'eee' }] let array3 = [{ id: 3, code: 'ww' }, { id: 1, code: 'ww' }, { id: 4, code: 'q' }] var concated = array1.concat(array2).concat(array3); //Flaten the concatenated array let output = concated.reduce((acc, cur) => { let entry = acc.find(item => item.id === cur.id); if (entry && Array.isArray(entry.code)) { //Check if it has sth in the array entry.code.push(cur.code); } else { acc.push({id: cur.id, code: [cur.code]}); //For the 1st time, add it to the array } //console.log(acc); return acc; }, []); console.log(output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.