Простое решение удалить дубликаты в массиве JS. Нужно использовать pu sh или pop and forEach - PullRequest
0 голосов
/ 16 марта 2020

Итак, я все еще учусь, так что прости простую природу. Но я пытаюсь написать функцию с именем uniq (arr). Если бы это работало, это возвратило бы новый массив без любых дублирующих значений. Он не должен изменять исходный массив.

Вот два тестовых вызова, которые в настоящее время не работают. Я не уверен, что ошибка означает> uniq ([1, 2, 3]) Ожидается: [1, 2, 3], но получил:

TypeError: undefined не является объектом (оценка 'copy.includes')

> uniq (['a', 'a', 'b']) Ожидается: ['a', 'b'], но получено: TypeError: undefined is не объект (оценка 'copy.includes')

function uniq(arr) {
  var copy;
  arr.forEach(function(item) {
    if (!copy.includes(item)) {
      push.copy(item);}})
  return copy
}

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Есть 2 проблемы с вашим кодом. Первоначальная ошибка возникает из-за того, что копия не имеет значения. Вам нужно присвоить ему значение пустого массива, чтобы можно было вызывать методы массива, например,

 var copy = [];

Вторая ошибка заключается в том, как вы используете метод push. Вам нужно вызвать pu sh для массива, а не наоборот (см. Ниже)

copy.push(item);

Исправление этих ошибок приводит нас к этому рабочему примеру

function uniq(arr) {
  var copy = [];
  arr.forEach(function(item) {
    if (!copy.includes(item)) {
      copy.push(item);
    }
  });
  
  return copy;
}

console.log(uniq(['a', 'a', 'b']));
0 голосов
/ 16 марта 2020

Set делает массив уникальным.

const unique = (arr) => {
  return [... new Set(arr)];
}

console.log(unique([1, 2, 3, 3, 2, 5]))
// Output: [1, 2, 3, 5]
...