在Javascript数组中查找重复元素

3
我有一个数组,想找到其中重复的元素。
我考虑创建一个新数组,在原始数组中每个元素的情况下,不包括该元素。这个数组包含相同的元素,但在处理的元素被切片后。然后我们会在这个新数组中查找它:如果原始数组中存在两个相同的元素,就会在新数组中找到它,并返回“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))

1
注意:你没有从 double 返回任何东西,因此无法记录。 - Andy
4个回答

2
如果整个数组中只有一个双精度浮点数,请使用以下代码:

Original Answer翻译成"最初的回答"

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

console.log(res)

如果需要预期不同的双倍数,请使用以下方式:

Original Answer翻译成"最初的回答"

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
为了达到预期结果,使用以下选项使用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:只需检查是否存在重复项,只需使用Set并比较长度即可。

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

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

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

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

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


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接