Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.01.2020, 20:18
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 130

Добавить в массив данные
Возникла задача. Есть начальный массив:
var cur = {
  groups: []
};

Есть массив данных:
var data  = [
    ['group1', 'Петр'],
    ['group1', 'Ваня'],
    ['group3', 'Сидр'],
    ['group2', 'Петров']
];

Нужно сделать так, чтобы сначала проверялось, если ли такая группа если нет, то создать и потом добавлять данные туда. В финале массив должен выглядеть так:
var final = {
  groups:[
    group1:[
      'Петр','Ваня'
    ],
    group2:[
      'Петров'
    ],
    group3:[
      'Сидр'
    ]
  ]
}

Как это реализовать?
Ответить с цитированием
  #2 (permalink)  
Старый 04.01.2020, 20:37
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Вам вместо массива нужен объект.

var cur = {
	groups: {}
};

var data = [['group1', 'Петр'], ['group1', 'Ваня'], ['group3', 'Сидр'], ['group2', 'Петров']];

for(const [group, name] of data) {
	if(group in cur.groups === false)
		cur.groups[group] = [];

	cur.groups[group].push(name);
}

console.log(cur);


В JS обычно используют что-то одно для представления данных — Object, Array, типы наследующие от TypedArray, Map или Set.

Последний раз редактировалось Malleys, 04.01.2020 в 20:40.
Ответить с цитированием
  #3 (permalink)  
Старый 05.01.2020, 13:14
Кандидат Javascript-наук
Отправить личное сообщение для Начинающий-Js-кодер Посмотреть профиль Найти все сообщения от Начинающий-Js-кодер
 
Регистрация: 12.06.2016
Сообщений: 130

Спасибо за код.
Так как у меня ff49 и итераторы не поддерживает и обновляться не планирую, переписал вот так:
var cur = {
  groups: {
  
  }
};

var data = [['group1', 'Петр'], ['group1', 'Ваня'], ['group3', 'Сидр'], ['group2', 'Петров']];

for(var i = 0; i < data.length; i++){
  if(data[i][0] in cur.groups === false)
    cur.groups[ data[i][0] ] = [];
  
  cur.groups[ data[i][0] ].push( data[i][1] );
 
}
console.log(cur);

Колхозно конечно, но должно работать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить форму которая будет добавлять данные в массив. olelukoie Элементы интерфейса 16 19.12.2018 17:25
не добавить новый обьект в массив по удаленному апи Георгий777 Общие вопросы Javascript 5 02.11.2018 12:19
Как получить данные всех атрибутов указанных элементов в массив Jigan2 jQuery 6 21.03.2015 16:39
Добавить строчку и этим пополнить массив Mahoney Общие вопросы Javascript 7 20.03.2015 12:23
как добавить в textarea данные strengerst Общие вопросы Javascript 2 19.02.2012 22:41