Сделать массив на основе данных другого массива
Добрый день, как можно из массива 1 получить массив 2?
Массив 1: [{ val1: 0, val2: 0, val3: 0, year: "2018" },{ val1: 1, val2: 1, val3: 1, year: "2019" }] Массив 2: [{ "Name": "val1", "2018": 0, "2019": 1 },{ "Name": "val2", "2018": 0, "2019": 1 },{ "Name": "val3", "2018": 0, "2019": 1 }] |
{
const array1 = [{
val1: 0,
val2: 0,
val3: 0,
year: "2018"
}, {
val1: 1,
val2: 1,
val3: 1,
year: "2019"
}];
const array2 = array1.reduce((m, v)=>{
const { map, result } = m;
const { year } = v;
for(const key of Object.keys(v)) {
if(key === "year")
continue;
if(key in map === false)
result.push(map[key] = {
Name: key
});
map[key][year] = v[key];
}
return m;
}, { map: {}, result: [] }).result;
console.log(array2);
}
|
Спасибо большое, то что нужно :)
|
PetrIII,
let data = [{
val1: 0,
val2: 0,
val3: 0,
year: "2018"
}, {
val1: 1,
val2: 1,
val3: 1,
year: "2019"
}];
let arr = data.reduce((obj, elem) => {
let {year, ...el} = elem;
for (let key in el) {
let ob = obj[key];
if (!ob) {
ob = obj[key] = {Name: key};
obj.arr.push(ob)
};
ob[year] = el[key];
};
return obj;
}, {arr: []}).arr
console.log(arr)
|
Цитата:
|
| Часовой пояс GMT +3, время: 21:44. |