@SeventimeSsS

Приходит массив с большим количеством объектов которые часто повторяются, как выводить только уникальные объекты?

Допустим, есть массив:

const arr = [
{ key: 1, text: "hello", number: 45 },
{ key: 1, text: "hello", number: 45 },
{ key: 2, text: "bye", number: 21 },
{ key: 2, text: "bye", number: 21 },
{ key: 3 text: "sleep", number: 121 },
{ key: 3, text: "sleep", number: 121 }
]

Нужно, чтобы по итогу оставалось только по одному уникальному объекту:

const arr = [
{ key: 1, text: "hello", number: 45 },
{ key: 2, text: "bye", number: 21 },
{ key: 3, text: "sleep", number: 121 }
]

И дальше я вывожу:

arr.map((value, index) => {
          return (
                <Item
                  key={index}
                  keyElem={value.key}
                  text={value.text}
                 number={value.number}
                />
              );
            })

Нужно, чтобы все значения ключей сравнивались на схожесть.
  • Вопрос задан
  • 117 просмотров
Решения вопроса 2
victormayorov
@victormayorov
Frontend разработчик
1 вариант
[...new Map(arr.map((item) => [item["key"], item])).values()]


2 вариант
const uniqueIds = [];
arr.filter(element => {
  const isDuplicate = uniqueIds.includes(element.key);

  if (!isDuplicate) {
    uniqueIds.push(element.key);

    return true;
  }

  return false;
});


3 вариант
https://docs-lodash.com/v4/uniq-by/

4 вариант
Object.values(
  arr.reduce( (c, e) => {
    if (!c[e.key]) c[e.key] = e;
    return c;
  }, {})
);


5 вариант
const unique = (arr, key) => {
   const keys = new Set();
   return arr.filter(el => !keys.has(el[key]) && keys.add(el[key]));
 };
unique(arr, 'key')


По каким полям нужно сравнивать, можешь допилить сам.
Ответ написан
Комментировать
@AHMED_RAPIRA
const uniqueItems = (array) => {
  const blacklist = {};

  return array.filter((item) => {
    const blacklistKey = JSON.stringify(item);

    if (!blacklist[blacklistKey]) {
      blacklist[blacklistKey] = true;

      return false;
    }

    return true;
  });
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы