Задать вопрос
@leyarthemes

Как объединить повторяющиеся значения в массиве и записать их индексы?

Есть, например, вот такой массив:

var arr = ["Label1", "Label2", "Label3", "Label4", "Label2"];

Нужно на выходе получить что-то вроде вот такого массива:

var arr = ["Label1", {"label": "Label2", "indexes": [1, 4]}, "Label3", "Label4"];
  • Вопрос задан
  • 654 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result =  Object
  .entries(arr.reduce((acc, n, i) => ((acc[n] = acc[n] || []).push(i), acc), {}))
  .map(n => n[1].length > 1 ? { label: n[0], indexes: n[1] } : n[0]);

если массив может содержать значения, которые, будучи различными, имеют одинаковый строковый эквивалент, то вместо обычного объекта используем Map:

const result = Array.from(
  arr.reduce((acc, n, i) => (acc.set(n, acc.get(n) || []).get(n).push(i), acc), new Map),
  ([ label, indexes ]) => ~-indexes.length ? { label, indexes } : label
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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