确定数组是否包含重复值

tar*_*djo 7 javascript arrays jquery

我想扫描JS数组并确定所有元素是否唯一,或者数组是否包含重复项.

例如:

my_array1 = [1, 2, 3] 
my_array2 = [1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我想得到这样的结果:

my_array1 must be return true, because this array element is unique
and array2 must be return false, because this array element is not unique
Run Code Online (Sandbox Code Playgroud)

我怎么能写这个方法?

Pra*_*thy 2

如果你想检查唯一性,你可以这样做。正如评论中所述,我并不断言这是唯一的最佳选择。下面有一些很好的答案。

var arr = [2,3,4,6,7,8,9];
var uniq = []; // we will use this to store the unique numbers found
               // in the process for doing the comparison

var result = arr.slice(0).every(function(item, index, array){
  if(uniq.indexOf(item) > -1){
    // short circuit the loop
    array.length=0; //(B)
    return false;
  }else{
    uniq.push(item);
    return true;
  }
});

result --> true
Run Code Online (Sandbox Code Playgroud)

arr.slice(0)创建数组的临时副本,在其上完成实际处理。这是因为当满足唯一性标准时,我清除数组 (B) 以短路循环。这将确保处理在满足条件后立即停止已满足。

如果我们将其公开为 Array 实例上的方法,效果会更好。所以我们可以做这样的事情[1,2,3,5,7].isUnique();

添加以下代码片段,您就可以开始了

Array.prototype.isUnique = function() {
    var uniq = [];
    var result = this.slice(0).every(function(item, index, arr) {
        if (uniq.indexOf(item) > -1) {
            arr.length = 0;
            return false;
        } else {
            uniq.push(item);
            return true;
        }
    });
    return result;
};

arr.isUnique() --> true
Run Code Online (Sandbox Code Playgroud)

演示版