检查数组是否包含重复值

mil*_*n m 24 javascript

我想编写一个javascript函数来检查数组是否包含重复值.

我写了下面的代码,但总是给出答案"真实".

有谁能告诉我我错过了什么.

function checkIfArrayIsUnique(myArray) 
    {
        for (var i = 0; i < myArray.length; i++) 
        {
            for (var j = 0; j < myArray.length; j++) 
            {
                if (i != j) 
                {
                    if (myArray[i] == myArray[j]) 
                    {
                        return true; // means there are duplicate values
                    }
                }
            }
        }
        return false; // means there are no duplicate values.
    }
Run Code Online (Sandbox Code Playgroud)

nat*_*ton 69

一个简单的解决方案,如果你有ES6,使用Set:

function checkIfArrayIsUnique(myArray) {
  return myArray.length === new Set(myArray).size;
}
Run Code Online (Sandbox Code Playgroud)

  • 美丽.. $%#%^ $ ing IE8! (4认同)
  • 布拉沃.很简单.这应该是公认的答案.ES6来救援! (3认同)
  • 需要再添加一个条件来检查数组是否只有一个元素... (3认同)

ofi*_*hai 20

let arr = [11,22,11,22];

let hasDuplicate = arr.some((val, i) => arr.indexOf(val) !== i);
// hasDuplicate = true
Run Code Online (Sandbox Code Playgroud)

True -> 数组有重复项

错误 -> 唯一数组

  • 你可以写成一行(有一些严格的相等):`a.some((val, i) =&gt; a.indexOf(val) !== i);` (2认同)

CD.*_*D.. 18

这应该只适用于一个循环:

function checkIfArrayIsUnique(arr) {
    var map = {}, i, size;

    for (i = 0, size = arr.length; i < size; i++){
        if (map[arr[i]]){
            return false;
        }

        map[arr[i]] = true;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 16

你得到的返回值是错误的:

  • 一旦找到两个相等的值,就可以得出结论,该数组不是唯一的并返回false.

  • 最后,在您检查完所有对之后,您可以返回true.

如果你这么做,并且数组很大,你可能想要研究对数组进行排序然后只比较相邻元素的可能性.这将比您当前的方法具有更好的渐近复杂度.


Mil*_*ous 7

假设您的目标浏览器不是 IE8,

这也可以:

function checkIfArrayIsUnique(myArray) 
{
    for (var i = 0; i < myArray.length; i++) 
    {
        if (myArray.indexOf(myArray[i]) !== myArray.lastIndexOf(myArray[i])) { 
            return false; 
        } 
    } 
    return true;   // this means not unique
}
Run Code Online (Sandbox Code Playgroud)