簡體   English   中英

JavaScript將具有相同ID的對象轉換為對象數組

[英]JavaScript converting object with same id to array of objects

我從我的API得到這個結果:

在此處輸入圖片說明

但是任何具有相同ID(例如最后2個)的人都希望將其歸為一個對象,因此數組(0,1,2)中只有3個項目,而最后一個則嵌套在最后一個項目中,因為它具有重復的ID。 它是從SQL以正確的格式排序的,所以我希望它保持順序。

可能有多達50個具有相同ID的可能需要嵌套的ID,我嘗試使用數組和鍵,但無法獲得所需的結果

if(data.length > 0){
    console.log(value);
     try{
         if(value.id == s[key - 1].id){
           console.log("match");
           s.push(value);
         } else {
            orderobj.push(s);
         }

      } catch(ex){}
        console.log(orderobj);
  } 

由於所有您的Like-ID都是順序​​的,因此在根據API數據創建新集合時,您可以做一個非常簡單的檢查。 只需繼續將對象添加到數組中,直到ID不再匹配,然后將該數組添加到父數組中即可。

 var apiData = [ {id: 1, text: '1asdf'}, {id: 2, text: '2asdf'}, {id: 3, text: '3asdf'}, {id: 4, text: '4asdf'}, {id: 4, text: '5asdf'}, ]; var dataArray = []; for(let i=0;i<apiData.length;++i) { var dataItem = []; dataItem.push(apiData[i]); while(i < apiData.length-1 && apiData[i].id === apiData[i+1].id) { ++i dataItem.push(apiData[i]); } dataArray.push(dataItem); } console.log('Final Array:', dataArray); 

我只需要創建一個以ID為鍵的對象映射,然后將匹配對象的數組作為值。 然后按順序循環對象鍵並從所有這些對象創建一個數組:

let objectMap = data.reduce(function(o, i) {
    if (!o[i.id]) o[i.id] = [];
    o[i.id].push(i)

    return o;
}, {})

和concat:

let sortedKeys = Object.keys(objectMap).sort();
let groupedData = sortedKeys.reduce(function(d, k) {
    d.push(objectMap[k]);
    return d;
}, []); //return format: [[{id:1}],[{id:2}],[{id:3},{id:3}]

嘗試這個

  var apiData = [ {id: 1, text: '1asdf'}, {id: 2, text: '2asdf'}, {id: 3, text: '3asdf'}, {id: 4, text: '4asdf'}, {id: 4, text: '5asdf'}, ]; var result = []; apiData.forEach((item) => { var saved = result.find((innerArr) => { return innerArr.find((innerItem) => innerItem.id === item.id) ? true : false; }) if(saved){ saved.push(item); } else { result.push([item]); } }) console.log(result); 

您可以使用array#reduce 您可以在共享相同id的數組中添加對象,然后使用Object.values()獲取所有對象。

 var arr = [{id:'27', uid: '7', code: 'HV0010SML', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'28', uid: '7', code: 'HV0010MED', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'29', uid: '7', code: 'HV0010LGE', productid: '1', datetime: '2017-10-06 15:57:17'},{id:'29', uid: '7', code: 'HV0010LGE', productid: '1', datetime: '2017-10-06 15:57:17'}]; var combined = arr.reduce((hash, obj) => { return obj.id in hash ? hash[obj.id].push(obj) : hash[obj.id] = [obj], hash; }, Object.create(null)); var result = Object.values(combined); console.log(result); 
 .as-console-wrapper{max-height: 100% !important} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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