将数组与另一个数组值进行比较

时间:2014-11-17 19:17:07

标签: javascript arrays

array与其他数组值进行比较。我有array,其值低于。

a = [1,5,6,7,3,8,12];

以下是我需要检查的array

b = [3,5,7];

我必须检查a contains b的价值。

function contains(n){
  for(var i=0; i<this.length; i++){
         if(this[i] == n)
             return true;
  }
  return false;
}

a.contains("12"); //would work
a.contains(b) //check for an array values?

当我传入number时,上述代码可以正常工作,任何人都可以告诉我如何通过array然后与另一个array进行有效比较。

3 个答案:

答案 0 :(得分:2)

  1. 您应该扩展数组以使用该功能。
  2. in this.length;它不是指函数,而是指数组
  3. 尝试以下代码。

    Array.prototype.equals = function (array, strict) {
        if (!array)
            return false;
    
        if (arguments.length == 1)
            strict = true;
    
        if (this.length != array.length)
            return false;
    
        for (var i = 0; i < this.length; i++) {
            if (this[i] instanceof Array && array[i] instanceof Array) {
                if (!this[i].equals(array[i], strict))
                    return false;
            }
            else if (strict && this[i] != array[i]) {
                return false;
            }
            else if (!strict) {
                return this.sort().equals(array.sort(), true);
            }
        }
        return true;
    }
    
    
    
    var arr1 = [1, 2, 3, 4];
    var arr2 = [2, 1, 4, 3];  // Loosely equal to 1
    var arr3 = [2, 2, 3, 4];  // Not equal to 1
    var arr4 = [1, 2, 3, 4];  // Strictly equal to 1
    
    arr1.equals(arr2);         // false
    arr1.equals(arr2, false);  // true
    arr1.equals(arr3);         // false
    arr1.equals(arr3, false);  // false
    arr1.equals(arr4);         // true
    arr1.equals(arr4, false);  // true
    

    我希望它有所帮助

答案 1 :(得分:1)

我认为您的contains功能已在Array.prototype上(因为您使用了this)。

鉴于此,您只需使用.every()来迭代b并测试每个值。

function contains(n){
  for(var i=0; i<this.length; i++){
         if(this[i] == n)
             return true;
  }
  return false;
}

Array.prototype.contains = contains;

var a = [1,5,6,7,3,8,12];

var b = [3,5,7];

var has_all = b.every(function(val) {
    return a.contains(val);
});

alert(has_all);

.every()方法会在第一个失败的值上短路,如果找到所有值,则会返回true,否则为false


ECMScript 5有一个.indexOf()方法,所以你可以实际使用它而不是你的函数。

var a = [1,5,6,7,3,8,12];

var b = [3,5,7];

var has_all = b.every(function(val) {
    return a.indexOf(val) !== -1;
});

alert(has_all);

答案 2 :(得分:1)

使用prototype属性在每个需要的情况下重用该函数。

Array.prototype.contains = function (n) {
  var s;
    for(s in this){
      if (this.hasOwnProperty(s) && n.indexOf(this[s]) !== -1) {
        return true;
      }
    }
  return false;
};

var a = [1, 5, 6, 7, 3, 8, 12],
  b = [1, 2, 11];
console.log(a.contains(b));