Javascript,检查数组是否是另一个数组列表

时间:2013-06-16 22:07:32

标签: javascript

我有一个带有som数组的数组......

现在我想检查数组中是否已经存在一个数组......是否可行?...

arr1 = [0, 0];
arr2 = [[0, 0], [0, 1]]

console.log($.inArray(arr1, arr2));

return : -1

4 个答案:

答案 0 :(得分:3)

inArray不会这样做,因为它们是两个不同的对象,即使它们包含相同的值,所以:

console.log([0,0] == [0,0]); //=> false, they're different objects

您必须循环并检查值是否匹配:

var has = false;
for (var i=0; i<arr2.length; i++) {
  if (arr2[i][0] === arr1[0] && arr2[i][1] === arr1[1]) {
    has = true;
    break;
  }
}

答案 1 :(得分:2)

当然有可能。唯一的问题是你想采取什么方法。

这是一种处理更复杂数组的方法。

function arrayInArray(arr, arrs) {
    return arrs.some(function (curr) {
        return curr.length === arr.length &&
               curr.every(function (_, i) {
                   return curr[i] === arr[i]
               })
    })
}

这可确保匹配数组中的项目数相同,并且项目的显示顺序与原始项目相同。

DEMO: http://jsfiddle.net/KEKcX/

console.log(arrayInArray([0,0], arr2)); // true
console.log(arrayInArray([0,1], arr2)); // true
console.log(arrayInArray([1,0], arr2)); // false

答案 2 :(得分:1)

这是一个循环遍历数组的通用函数。

function arrayContains(big, small) {
    for (var i = 0; i < big.length; i++) {
        if (big[i].length === small.length) {
            var j = 0;
            while (j < small.length && small[j] === big[i][j]) j++;
            if (j === small.length) return true;
        }
    }
    return false;
}

用法:

arr1 = [0, 0];
arr2 = [[0, 0], [0, 1]];

console.log(arrayContains(arr2, arr1)); // true
console.log(arrayContains(arr2, [0, 1])); // true
console.log(arrayContains(arr2, [0, 0, 0])); // false
console.log(arrayContains(arr2, [1, 0])); // false
console.log(arrayContains(arr2, [1, 1])); // false

答案 3 :(得分:1)

比较时使用JSON.stringify怎么样?

function contains (obj1, obj2) {
   for (key in obj1)
      if (JSON.stringify(obj1[key]) == JSON.stringify(obj2))
          return true;
   return false;
}

contains([[0,1], [0,0,1]], [0,1])           // => true
contains({foo: [0,1], bar: [0,0,1]}, [0,1]) // => true