Использование методов функционального программирования javascript (например, map/reduce), как бы заполнить/подсчитать поле status
arr1
и преобразовать его в массив объектов с ключом/значением в arr2
.Совокупность и преобразование массива объектов
arr1 = [
{'task':'do something 1', 'status':'done'} ,
{'task':'do something 2', 'status':'done'} ,
{'task':'do something 3', 'status':'pending'} ,
{'task':'do something 4', 'status':'done'}
];
// Aggregate arr1 `status` field and transform to:
arr2 = [
{key:'done', value: 3},
{key:'pending', value: 1}
];
Вот мой WIP частичное решение, которое обрабатывает только агрегация часть. Мне все еще нужна часть преобразования.
var arr2 = arr1.map(function(item) {
return item.status;
}).reduce(function(acc,curr,idx){
if(acc[curr] === undefined) acc[curr] = 1;
else acc[curr] += 1;
return acc;
}, []);
Я бы просто сделать [это] (https://jsfiddle.net/ocqnnmw3/1/), но не уверен, что это достаточно "функциональный". – adeneo
Ваше решение не дает ожидаемого ответа. Или предоставленный ответ неверен. – Kiril
Я считаю, что @Kiril прав, опубликованный код производит '[done: 3, pending: 1]', или, другими словами, обрабатывает массив как объект и не возвращает ожидаемый результат? – adeneo