Jukk
@Jukk

Как удалить из массива повторяющиеся значения?

Нужна кастомная функция unique() у объекта Array.

let arr = [1,2,3,5,5,3,3]

Должно быть что-то типа arr.unique();.

Сделал через Object.defineProperty и через return возвращаю новый массив уникальных значений.

А можно ли сделать, чтобы в arr сразу появились уникальные значения?

Т.е. без присваивания того, что вернет return.

Сейчас приходится писать arr = arr.unique();.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто:

Array.prototype.unique = function() {
  this.splice(0, this.length, ...new Set(this));
  return this;
};

Делаем сложно:

Array.prototype.unique = function(key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  let numDeleted = 0;

  this.forEach(function(n, i, a) {
    a[i - numDeleted] = n;
    const k = getKey(n);
    numDeleted += this.has(k) || !this.add(k);
  }, new Set);

  this.length -= numDeleted;

  return this;
};


[ 1, 1, 1, 2 ].unique() // [1, 2]
[ { id: 3 }, { id: 1 }, { id: 1 }, { id: 3 } ].unique('id') // [{id: 3}, {id: 1}]
[ 'a', 'b', 'c', 'd', 'ab', 'bc' ].unique(n => n.length) // ['a', 'ab']
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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