@Dubrovin

Как обработать такой массив в аналогичный с уникальными значениями по свойству?

Здравствуйте, есть вот такой массив объектов:
[
	{ 
	family: 'Roboto',
	variants: [ '400','500' ],
	subsets: [ 'cyrillic' ],
	},

	{ 
	family: 'Roboto',
	variants: [ '100','200' ],
	subsets: [ 'cyrillic-extended' ],
	},

	{ 
	family: 'Rubik',
	variants: [ '300' ],
	subsets: [ 'latin-extended' ],
	},

	{ 
	family: 'Rubik',
	variants: [ '500' ],
	subsets: [ 'latin-extended' ],
	},
]

Нужно преобразовать его в такой:
[
	{ 
	family: 'Roboto',
	variants: [ '100','200','400','500' ],
	subsets: [ 'cyrillic', 'cyrillic-extended' ],
	}

	{
	family: 'Rubik',
	variants: [ '300', '500' ],
	subsets: [ 'latin-extended' ],
	},
]

Как это сделать наиболее быстро с минимальным кодом? Использую ES6 без jQuery.
  • Вопрос задан
  • 197 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const groupUnique = (arr, idKey, ...keys) => Object
  .values(arr.reduce((acc, n) => {
    const id = n[idKey];
    acc[id] = acc[id] || keys.reduce((group, k) => (group[k] = [], group), {...n});
    keys.forEach(k => acc[id][k].push(...n[k]));
    return acc;
  }, {}))
  .map(n => (keys.forEach(k => n[k] = [...new Set(n[k])]), n));


const result = groupUnique(arr, 'family', 'variants', 'subsets');
Ответ написан
@davidnum95
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы