2016-08-09 2 views
0

Я хотел бы взять массив ниже и определить все уникальные значения «фрукты» и определить соответствующие значения для этих фруктов.Как сгруппировать массив по атрибуту, чтобы получить совокупное значение каждой группы по определенному ключу с помощью javascript?

Например, в приведенном ниже массиве мы знаем, что есть три плода (яблоки, бананы и вишня), и что у нас есть 2 яблока, 10 бананов и 5 вишней.

var input_data = [{"count":1,"fruit":"apple"},{"count":1,"fruit":"apple"},{"count":10,"fruit":"banana"},{"count":5,"fruit":"cherry"}] 

Исходя из вышеизложенного ввода, Я хотел бы достичь следующие выходы:

desired_output_1 = ['apple','banana','cherry'] 

desired_output_2 = [2,10,5] 

Я был в состоянии получить desired_output_1 со следующей функцией, которую я использовал от underscore.js, но я Не знаю, как достичь желаемого_выхода_2.

_.uniq(_.pluck(input_data,'fruit')) 

В результате я действительно хотел бы достичь [2,10,5], основываясь на счете для вышеуказанного.

ответ

0
var input_data = [{"count":1,"fruit":"apple"},{"count":1,"fruit":"apple"},{"count":10,"fruit":"banana"},{"count":5,"fruit":"cherry"}]; 

var fruits = []; 
var counts = []; 

for (var i in input_data) { 
    var index = fruits.indexOf(input_data[i].fruit); 
    if (index == -1) { 
     fruits.push(input_data[i].fruit) 
     counts.push(input_data[i].count); 
    } else { 
     counts[index] += input_data[i].count; 
    } 
} 

console.log(fruits, counts); 
0

var data = [{ 
 
    "count": 1, 
 
    "fruit": "apple" 
 
}, { 
 
    "count": 1, 
 
    "fruit": "apple" 
 
}, { 
 
    "count": 10, 
 
    "fruit": "banana" 
 
}, { 
 
    "count": 5, 
 
    "fruit": "cherry" 
 
}]; 
 

 
var fruits = []; 
 
var counts = []; 
 
for (var i in data) { 
 
    var index = fruits.indexOf(data[i].fruit); 
 
    if (index == -1) { 
 
     fruits.push(data[i].fruit) 
 
     counts.push(data[i].count); 
 
    } else { 
 
     counts[index] = counts[index] + data[i].count; 
 
    } 
 
} 
 

 
console.log(fruits , counts);

0

Вам не нужно подчеркиванием/lodash :)

var input_data = [ 
 
     {"count":1,"fruit":"apple"}, 
 
     {"count":1,"fruit":"apple"}, 
 
     {"count":10,"fruit":"banana"}, 
 
     {"count":5,"fruit":"cherry"} 
 
    ]; 
 
    
 
    
 
    var result = input_data.reduce(function (acc, current) { 
 
     if(!acc[current.fruit]) { 
 
     acc[current.fruit] = 0; 
 
     } 
 
     acc[current.fruit] += current.count; 
 
     return acc; 
 
    }, {}); 
 
    
 
    console.log(result);

Output является объектом, а не из двух массивов. Это будет поддерживать плоды < -> отношение отношения.