2016-11-30 2 views
0

Мой массив являетсяКак сгруппировать массив объектов с одним и тем же ключом в одном массиве как объект?

[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"]}] 

То же самое для других значений

+0

И язык? –

+0

Javascript Language – sunnyn

ответ

1

Я бы подойти к этому перебором ключей для каждого объекта, и добавление ключа в качестве хэш для вашего объекта значений.

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 ]) 
    } 

}) 
+0

Объект {Color = [1], Shape = [1], Thickness = [1], more ...} Он дает этому объекту значения balnk – sunnyn

+0

Я только что скопировал исходный массив из вашего кода. Очевидно, что это вызовет ошибку во время выполнения, но слишком ленив, чтобы правильно отформатировать массив src. Исправлено. – jusopi

0

Это должно делать то, что вы хотите:

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 
}, {}) 
+0

приятное использование 'Array.prototype.reduce' :) – jusopi

0

Похоже, что вы должны сделать петлю, чтобы получить то, что вы ищете.

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; 
0

У вас будет слишком петля через объект и сохранить уникальные результаты. Ниже приводится приблизительный способ закодировать следующим образом:

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}; 
0
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]] ); 
    } 
    } 
} 
Смежные вопросы