Имеется, например, несколько объектов в массиве:
let shop = [{
id: 105,
date: '2018-10-11',
fact: 100,
plan: 95
}, {
id:105,
date: '2018-10-12',
fact: 105,
plan: 100
}, {
id:106,
date: '2018-10-11',
fact: 110,
plan: 115
}, {
id:106,
date: '2018-10-12',
fact: 120,
plan: 115
}];
Нужно получить структуру из объектов с id и массивами факта и плана (выполнения продаж, например):
let groups = [{
id: 105,
fact: [100, 105],
plan : [95, 100]
}, {
id: 106,
fact: [110, 120],
plan: [115, 115]
}];
console.log(groups);
Пытался использовать reduce, но тогда я складываю вообще все факты и планы, не учитывая id. Прогонял первый массив в forEach и map, но так же не могу понять, как мне оставить id уникальным, а fact и plan слить в массивы к этим id.
shopsidfact и plan соответствующие значения элементаРеализации могут несколько отличаться, но суть такова:
let shop = [{
id: 105,
fact: 100,
plan: 95
}, {
id: 105,
fact: 105,
plan: 100
}, {
id: 106,
fact: 110,
plan: 115
}, {
id: 106,
fact: 120,
plan: 115
}];
let groups = [];
for (let element of shop) {
let existingGroups = groups.filter(group => group.id == element.id);
if (existingGroups.length > 0) {
existingGroups[0].fact.push(element.fact);
existingGroups[0].plan.push(element.plan);
}
else {
let newGroup = {
id: element.id,
fact: [element.fact],
plan: [element.plan]
};
groups.push(newGroup);
}
}
console.log(groups);
Для группировки можно воспользоваться методом reduce.
Свернуть предоставленный массив в объект, где ключом будет id, и в итоге взять значения, с помощью Object.values
let shop = [{
id: 105,
date: '2018-10-11',
fact: 100,
plan: 95
}, {
id:105,
date: '2018-10-12',
fact: 105,
plan: 100
}, {
id:106,
date: '2018-10-11',
fact: 110,
plan: 115
}, {
id:106,
date: '2018-10-12',
fact: 120,
plan: 115
}];
var map = shop.reduce((acc, cur)=>{
acc[cur.id] = acc[cur.id] || {
id: cur.id,
facts: [],
plans: []
};
acc[cur.id].plans.push(cur.plan);
acc[cur.id].facts.push(cur.fact);
return acc;
},{})
var result = Object.values(map);
console.log(result);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости