2015-05-18 2 views
0

У меня есть следующие реализации и его функциональнаяГруппировка JavaScript Объекты и настройка

https://jsfiddle.net/9mv6w0da/

Входной

dataSet[0].data= [ 
    {color:"yellow",weight:12} 
    ,{color:"yellow", weight:12} 
    ,{color:"yellow", weight:12} 
    ,{color:"red",weight:13} 
    ,{color:"red", weight:13} 
];   
dataSet[1].data= [ 
    {color:"yellow",weight:12} 
    ,{color:"yellow", weight:12} 
    ,{color:"red",weight:13} 
    ,{color:"red",weight:13} 
    ,{color:"blue",weight:11} 
    ,{color:"blue",weight:11} 
]; 

Выходной ток

an[0]=[ 
    {color:"yellow",weight:12} 
    ,{color:"yellow",weight:12} 
    ,{color:"yellow",weight:12} 
    ,{color:"yellow",weight:12} 
    ,{color:"yellow",weight:12} 
] 
an[1]=[ 
    {color:"red",weight:13} 
    ,{color:"red",weight:13} 
    ,{color:"red",weight:13} 
    ,{color:"red",weight:13} 
] 
an[2]=[{color:"blue",weight:11},{color:"blue",weight:11}] 

Я хотел бы добавить {color:null, weight:null} , когда я группирую данные из разных объектов javascript.

Псевдо код: DataSet [0] (цвет, вес) + {цвет: нулевой, вес: нулевой} + DataSet [1] (цвет, вес)

Если вы посмотрите при желаемом выходе, an[0], первый three objects происходит от dataSet[0], а последний two objects исходит от dataSet[1]. Когда я комбинируя их, я хотел бы добавить {color:null, weight:null}

требуемого выходного

an[0]=[ 
     {color:"yellow",weight:12} 
     ,{color:"yellow",weight:12} 
     ,{color:"yellow",weight:12} 
     ,{color:null, weight:null} 
     ,{color:"yellow",weight:12} 
     ,{color:"yellow",weight:12} 
    ] 
    an[1]=[ 
     {color:"red",weight:13} 
     ,{color:"red",weight:13} 
     ,{color:null, weight:null} 
     ,{color:"red",weight:13} 
     ,{color:"red",weight:13} 
    ] 
    an[2]=[{color:"blue",weight:11},{color:"blue",weight:11}] 
+0

Я не думаю, что это очень ясно, когда '{цвет: нулевой, вес: NULL}' должен быть добавлен. Не могли бы вы более подробно объяснить «групповые данные из разных объектов javascript»? – Dhiraj

+0

Если вы посмотрите на нужный вывод, то [0], первые «три объекта» поступают из 'dataSet [0'], а последние« два объекта »поступают из' dataSet [1] '. Когда я их совмещаю, я хотел бы добавить '{color: null, weight: null}' Пожалуйста, дайте мне знать, если это не ясно. – casillas

+0

поэтому 'an [2]' не имеет 'null', потому что оба значения (синие) у него есть из ** того же ** набора данных? – Dhiraj

ответ

1

Вы можете добавить дополнительный атрибут, чтобы указать, что такое номер массива, и после этого поставить эту логику (добавление дополнительного объекта) в метод groupby.

var i = 0 ; 
var dataSet1 = dataSet.map(function(obj){ 
obj.map(function(objj){ 
    objj.arrkey = i ; 
    return objj; 
}); 
i = i+1; 
return obj; 

}); 


function groupBy(arr, f) { 
var result = {}; 
var arrKey = {} ; 
arr.forEach(function(elem) { 
var fElem = f(elem), 
    list = result[fElem] || [], 
    arr = arrKey[fElem] ; 

    if(arr === undefined){ 
     arr = elem.arrkey;} 

if(elem.arrkey != arr) 
{ 
    list.push(nullobj); 
} 
list.push(elem); 
arrKey[fElem] = elem.arrkey; 
result[fElem] = list; 
}); 
return result; 
} 

Пример в https://jsfiddle.net/5swdjg3f/

+0

Спасибо большое @ kwan245, он работает как шарм! – casillas

0
combined = data1.concat ([{color: null, weight: null}]).concat (data2) 

Но не делают этого. Используйте массив массивов, где каждый источник имеет свой собственный под-массив или, еще лучше, напишет класс с помощью метода, который четко объясняет, почему эти наборы разделены, потому что следующий парень в этом коде не знает, что такое null y элемент указывает. Он также не может группировать вещи по каким-либо другим критериям, не переваривая ваши разделители и не добавляя свои собственные, которые будут одинаково взломаны.

Смежные вопросы