Поиск дублирующихся элементов в массивах Javascript - PullRequest
2 голосов
/ 27 июня 2019

У меня есть массив, и я хочу найти, какой элемент там находится дважды.

Я думал о создании нового массива для каждого элемента в исходном массиве без этого элемента.Этот массив содержит те же элементы, но после нарезки того, с которым мы имеем дело.Затем мы попытаемся найти его в этом новом массиве: поэтому, если он существует дважды в исходном массиве, он будет там и будет возвращать «true», а если нет, его не будет в новом массиве, и онвернул бы «ложь», основываясь на моем коде.

let arr = ["stephanie", "alex", "steven", "alex"]

function double(name) {
  arr.forEach((name, index) => {
    let newarr = arr.slice(index);
    console.log(newarr);
    const searchedelement = newarr.find(name === nom);
    console.log(searchedelement);
  })
}

console.log(double(name))

Ответы [ 4 ]

2 голосов
/ 27 июня 2019

Если в массиве только один дубль, используйте следующее:

let arr = ["stephanie", "alex", "steven", "alex"]
    res = arr.filter(v => arr.indexOf(v) !== arr.lastIndexOf(v))[0];

console.log(res)

Если ожидаются разные удвоения, используйте это:

let arr = ["stephanie", "alex", "steven", "alex","steven"]
    res = [...new Set(arr.filter(v => arr.indexOf(v) !== arr.lastIndexOf(v)))];

console.log(res)

Важно : Оба фрагмента работают для любого вида повторения, поэтому, если вы хотите точно проверить наличие двух совпадений, это необходимо изменить!

Если вы хотите только двойные числа, которые являются действительными двойными, но не тройными, или что-нибудь еще, учтите это:

let arr = ["stephanie", "alex", "steven", "alex","steven", "alex"]
    res = Object.entries(arr.reduce((a,c) => {a[c] = (a[c] || 0 ) + 1; return a},{}))
                .filter(v => v[1] == 2).map(v => v[0]);

console.log(res)
1 голос
/ 27 июня 2019

Чтобы достичь ожидаемого результата, используйте приведенную ниже опцию usind Reduce, чтобы выполнить цикл только один раз.

  1. . Выполните цикл с помощью метода Reduce и нажмите на объект накопителя.
  2. Проверьте, существует ли свойство или нети нажмите, чтобы дублировать массив
  3. Вернуть дублированный массив

let arr = ["stephanie", "alex", "steven", "alex"]

function double(arr){
  const dup =[]
  arr.reduce((acc, v) => {
    acc[v] = acc[v] ? dup.push(v) : 1;
    return acc
  }, {});
  return dup
}
console.log(double(arr))

Вариант 2: Просто чтобы проверить, существует дубликат или нет, просто используйте Задать и сравнить длину

let arr = ["stephanie", "alex", "steven", "alex", "steven"]

function double(arr){
   const uniq = [...new Set(arr)]
   return arr.length !== uniq.length
}

console.log(double(arr))
0 голосов
/ 27 июня 2019

Вы можете попробовать как,

let arr = ["stephanie", "alex", "steven", "alex"];

function isDouble(arr) {
  let isDouble = false;
  for(let el of arr) {
    if(arr.filter(element => element != el).length === arr.length-2){
        isDouble = true;
        break;
    }
  };
  return isDouble;
};

console.log(isDouble(arr));
0 голосов
/ 27 июня 2019

Вы можете отфильтровать массив, проверив, сколько раз в нем найдены значения.

Затем создайте объект Set, чтобы исключить все дубликаты.

const arr = ['joe', 'steph', 'john', 'joe', 'thomas', 'john'];

console.log(
  [...new Set(arr.filter(e => arr.filter(s => s === e).length > 1))]
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...