簡體   English   中英

如何在同一數組中將具有相同鍵的對象數組分組為對象?

[英]How to group an array of object with same key in a single array as object?

我的數組是

[Object { Color="Blues",  Shape="Octagon",  Thickness="High (Over 1 Inch)",  more...}, Object { Color="Burgundys",  Shape="Oval",  Thickness="3⁄8" (approx.)",  more...}]

我想要輸出:

[{"Color":["Blues","Burgundys "],"Shape":['Octagon',"Oval"]}] 

其他值相同

我將通過遍歷每個對象的鍵,然后將鍵作為哈希值添加到您的values對象來實現。

var vals = {}
var src = [{ Color="Blues",  Shape="Octagon",  Thickness="High (Over 1 Inch)"}, { Color="Burgundys",  Shape="Oval",  Thickness="3⁄8 (approx.)"}]

src.forEach( function( obj ){

    for( var key in obj ){
        if( vals[ key ] === undefined ) 
            vals[ key ] = []

        vals[ key ].push( obj[ key ])
    }

})

這應該做您想要的:

a = [{foo: 1, bar: 2}, {foo: 3, bar: 4}]
a.reduce((acc, val) => {
  for (var key in val) {
    if (!val.hasOwnProperty(key)) continue;
    if (!acc.hasOwnProperty(key)) acc[key] = []
    acc[key].push(val[key])
  }
  return acc
}, {})

看來您必須做一個循環才能得到想要的東西。

var colors = [];
var shapes = []; for(var i = 0;i<objArray.length;i++)
{
    colors[i] = objArray[i].color
    shapes[i] = objArray[i].shape
}
answer = {};
answer.colors = colors;
answer.shapes = shapes;

您也將遍歷對象,並存儲唯一的結果。 以下是對此進行編碼的大概方法:

var colors = [], shapes = [];

for (var i = 0; i < object.length; i++) {
  var color = object[i].Color, shape = object[i].Shape;
  if (colors.indexOf(color) === -1) { colors.push(color); }
  if (shapes.indexOf(shape) === -1) { shapes.push(shape); }
}

result = {"Color": colors, "Shape": shapes};
var arr = [{
  color: "Blues",
  Shape: "Octagon"
},
{
 color: "Burgundys",
 Shape="Oval"
}]

var targetObject = {};

for(var iloop=0; iloop< arr.length; iloop++){
  //get the keys in your object
  var objectKeys = Object.keys(arr[iloop]);

   //loop over the keys of the object
   for(var jloop=0; jloop<objectKeys.length; jloop++){
     //if the key is present in your target object push in the array 
     if( targetObject[ objectKeys[jloop] ] ){
       targetObject[objectKeys[jloop]].push( arr[iloop][objectKeys[jloop]] );
     }else{
       // else create a array and push inside the value
       targetObject[objectKeys[jloop]] = []
       targetObject[objectKeys[jloop]].push( arr[iloop][objectKeys[jloop]]     );
     }
   }
}

暫無
暫無

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

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