Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2018, 14:33   #1
yannna
Новичок
Джуниор
 
Регистрация: 03.10.2018
Сообщений: 1
По умолчанию сгруппировать элементы указанного массива по ключу

Помогите, плиз, сгруппировать элементы указанного массива по ключу и вернуть multimap ключей, извлеченных из элементов массива через обратный вызов keySelector и значений, извлеченных с помощью обратного вызова valueSelector.
Решение нужно универсальное для массива с любыми названиями ключей.
На входе:
Код:
 group([
      { country: 'Belarus', city: 'Brest' },
      { country: 'Russia', city: 'Omsk' },
      { country: 'Russia', city: 'Samara' },
      { country: 'Belarus', city: 'Grodno' },
      { country: 'Belarus', city: 'Minsk' },
      { country: 'Poland', city: 'Lodz' }
     ], 
     item => item.country, 
     item => item.city
   )
Получить нужно:
Код:
Map {
     "Belarus" => ["Brest", "Grodno", "Minsk"],
     "Russia" => ["Omsk", "Samara"], 
     "Poland" => ["Lodz"]
    }
Для данного массива я сделала следующее:
Код:
function group(myArray, keySelector, valueSelector) { 
  var group_to_values = myArray.reduce(function (obj, item) {
    obj[item.country] = obj[item.country] || [];
    obj[item.country].push(item.city);
    return obj;
  }, {});

  return Object.keys(group_to_values).map(key => [ key, group_to_values[key]]);
}
Но как правильно использовать в функции передаваемые item => item.country, item => item.city ?

Последний раз редактировалось Serge_Bliznykov; 03.10.2018 в 15:11.
yannna вне форума Ответить с цитированием
Старый 05.10.2018, 10:46   #2
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
Стрелка

Как вариант, можно переименовать ключи.
Код:
var arr1 = [
	{country: 'Belarus', city: 'Brest'},
	{country: 'Russia', city: 'Omsk'},
	{country: 'Russia', city: 'Samara'},
	{country: 'Belarus', city: 'Grodno'},
	{country: 'Belarus', city: 'Minsk'},
	{country: 'Poland', city: 'Lodz'}
];
console.log('Изначальный arr1 =', arr1);

var arr2 = [
	{category: 'fruit', title: 'banana'},
	{category: 'veggies', title: 'potato'},
	{category: 'fruit', title: 'apple'},
	{category: 'veggies', title: 'carrot'}
];
console.log('Изначальный arr2 =', arr2);

function renameKeys(a) {
	var fields = Object.keys(a[0]);
	return a.map(function(el) {
		return {['name']: el[fields[0]], ['value']: el[fields[1]]};		
	});
}

function group(myArray) {
	var group_to_values = myArray.reduce(function (obj, item) {
		obj[item.name] = obj[item.name] || [];
		obj[item.name].push(item.value);
		return obj;
	}, {});
	return Object.keys(group_to_values).map(function(k) {
		return [k, group_to_values[k]];
	});
}

var res1 = group(renameKeys(arr1));
console.log('res1 =', res1);

var res2 = group(renameKeys(arr2));
console.log('res2 =', res2);:)
SQLPowerUser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти минимальный и максимальный элементы массива Х и поменять их в массиве местами. Элементы массива вычисляются по формуле Xi=(( Милашечка Помощь студентам 0 26.05.2013 13:01
Сгруппировать все ненулевые значения в начале массива Sergey_Belov Помощь студентам 2 04.04.2012 12:37
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
Формулы массива или сгруппировать данные kzld Microsoft Office Excel 10 30.11.2009 18:59