簡體   English   中英

我如何合並這個對象數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM