javascript数组的数组

假设我们有以下的js数组

var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var val = [3,566,23,79]; 

有没有一个js内置函数或jQuery之一,你可以search数组arval

谢谢

** * 更新 * ** * ** * ** * ** *

融合的反应,我创造了这个原型

 Array.prototype.containsArray = function(val) { var hash = {}; for(var i=0; i<this.length; i++) { hash[this[i]] = i; } return hash.hasOwnProperty(val); } 

你可以创build一个哈希。

 var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var hash = {}; for(var i = 0 ; i < ar.length; i += 1) { hash[ar[i]] = i; } var val = [434,677,9,23]; if(hash.hasOwnProperty(val)) { document.write(hash[val]); } 

您也可以使用JSON序列化技巧。 它简短而简单,但是有点怪异。
它工作,因为"[0,1]" === "[0,1]"

这是工作演示片段:

 Array.prototype.indexOfForArrays = function(search) { var searchJson = JSON.stringify(search); // "[3,566,23,79]" var arrJson = this.map(JSON.stringify); // ["[2,6,89,45]", "[3,566,23,79]", "[434,677,9,23]"] return arrJson.indexOf(searchJson); }; var arr = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; document.body.innerText = arr.indexOfForArrays([3,566,23,79]); 
 function indexOfArray(val, array) { var hash = {}, indexes = {}, i, j; for(i = 0; i < array.length; i++) { hash[array[i]] = i; } return (hash.hasOwnProperty(val)) ? hash[val] : -1; }; 

我认为这比containsArray()更有用。 它解决了同样的问题,但返回的索引,而不是只是布尔值的truefalse

我想没有这样的JSfunction可用。 但是你可以创build一个

 function arrEquals( one, two ) { if( one.length != two.length ) { return false; } for( i = 0; i < one.length; i++ ) { if( one[i] != two[i] ) { return false; } } return true; } 

这个问题与Javascript中的对象/数组相等。 本质上,问题是两个数组不相等,即使它们具有相同的值。 您需要循环访问数组,并将成员与search关键字( val )进行比较,但是您需要精确比较数组的方法。

最简单的方法是使用允许数组/对象比较的库。 underscore.js有一个非常有吸引力的方法来做到这一点:

 for (var i = 0; i < ar.length; i++) { if (_.isEqual(ar[i], val)) { // value is present } } 

如果你不想使用另一个库(尽pipe我会敦促你 – 或者至less借用JSON.stringify源代码的消息),你可以用JSON.stringify来做到这JSON.stringify

 var valJSON = JSON.stringify(val); for (var i = 0; i < ar.length; i++) { if (valJSON === JSON.stringify(ar[i]) { // value is present } } 

但是,这几乎肯定会慢得多。

你能试试吗?

 var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var val = [3,566,23,79]; var sval = val.join(""); for(var i in ar) { var sar = ar[i].join(""); if (sar==sval) { alert("found!"); break; } } 

为什么不使用JavaScript数组函数?

 function filterArrayByValues(array, values) { return array.filter(function (arrayItem) { return values.some(function (value) { return value === arrayItem; }); }); } 

或者如果你的数组更复杂,并且你只想比较一个属性,但是作为结果返回整个对象:

  function filterArrayByValues(array, values, propertyName) { return array.filter(function (arrayItem) { return values.some(function (value) { return value === arrayItem[propertyName]; }); }); } 

更多关于使用函数: filter()和一些()

您可以使用Array.prototype.some()Array.prototype.every()来检查每个数组的每个元素。

 var ar = [ [2, 6, 89, 45], [3, 566, 23, 79], [434, 677, 9, 23] ]; var val = [3, 566, 23, 79]; var bool = ar.some(function(arr) { return arr.every(function(prop, index) { return val[index] === prop }) }); console.log(bool);