在Javascript数组中查找重复的元素

时间:2019-06-27 13:15:19

标签: javascript ecmascript-6

我有一个数组,我想两次查找哪个元素。

我想到了为原始数组中的每个元素创建一个新数组,而没有该元素。该数组包含相同的元素,但在将要处理的元素切片之后。然后,我们尝试在此新数组中找到它:因此,如果它在原始数组中存在两次,它将存在并且它将返回“ true”,否则,它将不在新数组中并且根据我的代码将返回“ false”。

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 个答案:

答案 0 :(得分:2)

如果整个数组中只有一个double,请使用以下命令:

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 :(得分:1)

要达到预期效果,请使用usind reduce的以下选项仅循环一次

  1. 使用减少并推入累加器对象来循环
  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))

答案 2 :(得分:0)

您可以通过检查数组中找到值的次数来过滤数组。

然后,构造一个Set对象以消除所有重复项。

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

console.log(
  [...new Set(arr.filter(e => arr.filter(s => s === e).length > 1))]
);

答案 3 :(得分:0)

您可以尝试使用

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));