Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

Помогите, плиз, сгруппировать элементы указанного массива по ключу и вернуть 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 в 16:11.
yannna вне форума   Ответить с цитированием
Старый 05.10.2018, 11:46   #2
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 145
Репутация: 193
Стрелка

Как вариант, можно переименовать ключи.
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти минимальный и максимальный элементы массива Х и поменять их в массиве местами. Элементы массива вычисляются по формуле 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 19:59


11:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru