Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.07.2019, 10:10
Интересующийся
Отправить личное сообщение для PetrIII Посмотреть профиль Найти все сообщения от PetrIII
 
Регистрация: 27.06.2014
Сообщений: 12

Сделать массив на основе данных другого массива
Добрый день, как можно из массива 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
}]
Ответить с цитированием
  #2 (permalink)  
Старый 02.07.2019, 10:52
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

{
	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);
}

Последний раз редактировалось Malleys, 02.07.2019 в 10:55.
Ответить с цитированием
  #3 (permalink)  
Старый 02.07.2019, 11:12
Интересующийся
Отправить личное сообщение для PetrIII Посмотреть профиль Найти все сообщения от PetrIII
 
Регистрация: 27.06.2014
Сообщений: 12

Спасибо большое, то что нужно
Ответить с цитированием
  #4 (permalink)  
Старый 02.07.2019, 11:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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)
Ответить с цитированием
  #5 (permalink)  
Старый 02.07.2019, 13:07
Интересующийся
Отправить личное сообщение для PetrIII Посмотреть профиль Найти все сообщения от PetrIII
 
Регистрация: 27.06.2014
Сообщений: 12

Сообщение от рони Посмотреть сообщение
PetrIII,
Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно добавить/удалить элемент в массив (из массива)? gsdev99 Элементы интерфейса 2 12.02.2019 12:15
Проблема получения объекта JSON espltd Элементы интерфейса 13 03.02.2016 14:55
Сделать все элементы массива уникальными exec Общие вопросы Javascript 43 25.12.2015 01:14
Подкачка данных в массив simple Общие вопросы Javascript 6 01.10.2010 09:20
Как лучше сделать глобальный массив skyfish AJAX и COMET 4 17.02.2009 18:05