2015-12-04 4 views
1

Как преобразовать эти следующие входы в выходной файл.Фильтр массива объектов в объект

Вход:

[{"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 
}) 

ответ

5

Снизить данные, как это:

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

Утилиты подзарядки весьма удобны для манипулирования массивами и объектами. Попробуйте это:

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 
     })  
}) 
+1

Любовь это. Больше, чем мой собственный ответ. Я перейду к утилитам underscore :) –

+2

@vivekmaharajh Также проверьте lodash. – user3812377

0

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

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

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