簡體   English   中英

將對象數組過濾為對象

[英]Filter an array of Objects into Object

如何將以下這些輸入轉換為輸出。

輸入:

[{"id":1, "subid":5}, 
{"id":1, "subid":9}, 
{"id":2, "subid":16}, 
{"id":2, "subid":27}]

輸出:

[{1:[5,9]},
{2:[16,27]}]

到目前為止,這是我嘗試過的:

var newobj = new Object(); 
listOfObject.forEach(function(i) { 
   var id = i.id 
   newobj[id] = [] 
   newobj[id].push(i.subid) 
   return newobj 
})

減少像這樣的數據:

var arrayData = [{"id":1, "subid":5}, {"id":1, "subid":9}, {"id":2, "subid":16}, {"id":2, "subid":27}];

var result = arrayData.reduce(function (result, obj) {
  var id = obj.id;
  result[id] = (result[id] || []);
  result[id].push(obj.subid);
  return result;
}, {});

下划線實用程序對於數組和對象操作非常方便。 嘗試這個:

var list = [{"id":1, "subid":5}, {"id":1,"subid":9},{"id":2,"subid":16}{"id":2, "subid":27}]   
 _.mapObject(_.groupBy(list, 'id'), function(val){          
       return val.map(function(obj){    
          return obj.subid
       })       
 })
var input = [
    {"id":1, "subid":5}, 
    {"id":1, "subid":9}, 
    {"id":2, "subid":16}, 
    {"id":2, "subid":27}
];

var output = [];
for (var i = 0; i < input.length; i++) {
  var id = input[i].id;
  var subid = input[i].subid;
  if (output[id] == null) {
    output[id] = [];
  }
  output[id].push(subid);
}

我只是遍歷輸入數組並檢查是否存在現有屬性,然后添加一個新對象或將其推送到現有數組。

 var input = [ {"id":1, "subid":5}, {"id":1, "subid":9}, {"id":2, "subid":16}, {"id":2, "subid":27} ]; var output = []; input.forEach(function(a){ var existing = output.find(function(b){ return b.hasOwnProperty(a.id); }); existing ? existing[a.id].push(a.subid) : output.push({[a.id]: [a.subid]}); }); console.log(output); 

暫無
暫無

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

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