Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сделать массив на основе данных другого массива (https://javascript.ru/forum/misc/77915-sdelat-massiv-na-osnove-dannykh-drugogo-massiva.html)

PetrIII 02.07.2019 10:10

Сделать массив на основе данных другого массива
 
Добрый день, как можно из массива 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
}]

Malleys 02.07.2019 10:52

{
	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 02.07.2019 11:12

Спасибо большое, то что нужно :)

рони 02.07.2019 11:42

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)

PetrIII 02.07.2019 13:07

Цитата:

Сообщение от рони (Сообщение 509731)
PetrIII,

Спасибо :)


Часовой пояс GMT +3, время: 01:34.