Задать вопрос
maralov
@maralov
фронт-джун

Узнать есть повторы в массиве?

Приветствую

есть массив типа

[
        {name: name1, id: 1},
        {name: name2, id: 1},
    ]


как можно проверить что есть id совпали то вернуть true?
  • Вопрос задан
  • 579 просмотров
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Простейший способ - запоминаем использованные айдишки в отдельном объекте и проверяем, повторилось ли.

const test = [{
    name: 'name1',
    id: 1
  },
  {
    name: 'name2',
    id: 1
  },
];

function checkForRepeatIDs(arr) {
  const memo = {};

  for (let item of arr) {
    const { id } = item;
    if (memo[id]) return true;
    memo[id] = true;
  }

  return false;
}

console.log(checkForRepeatIDs(test)); // true
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вариант 1
https://developer.mozilla.org/en-US/docs/Web/JavaS... внутри накапливать id которые встречаются.
Недостаток - reduce перебирает весь массив, если вы уже нашли повтор и вам не нужно искать дальше, он все равно пройдется по остальным елементам
Вариан 2 - https://developer.mozilla.org/en-US/docs/Web/JavaS...
ID которые уже встречались в массиве нужно сохранять во внешнем накопителе но он перебирает массив до первого true
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Один раз пойти по элементам с конца в начало,
брать id очередного и искать с таким же id в массиве слева направо,
если нашёлся под другим индексом, нежели текущий — баста, есть дубли!
const hasDupes = (arr) => {
  for (let i = arr.length - 1; i >= 0; i--) {
    if (i !== arr.findIndex((el) => arr[i].id === el.id))
      return true;
  }
  return false;
}
Ответ написан
Ваш ответ на вопрос

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

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