javascript搜索数组数组

Tho*_*mas 17 javascript arrays search

假设我们有以下js数组

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

var val = [3,566,23,79];
Run Code Online (Sandbox Code Playgroud)

是否有一个js内置函数或jQuery,您可以使用它来搜索数组arval

谢谢

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

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

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

fus*_*ion 21

你可以创建一个哈希.

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]);
}
Run Code Online (Sandbox Code Playgroud)

  • 一点解释会很好.当用作对象键时,数组会隐式转换为字符串. (5认同)

Yel*_*yev 7

您还可以使用 JSON 序列化技巧。它简短而简单,但有点hacky。
它有效,因为"[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]);
Run Code Online (Sandbox Code Playgroud)


小智 5

function indexOfArray(val, array) {
  var hash = {};
  for (var i = 0; i < array.length; i++) {
    hash[array[i]] = i;
  }
  return (hash.hasOwnProperty(val)) ? hash[val] : -1;
};
Run Code Online (Sandbox Code Playgroud)

我认为这比 更有用containsArray()。它解决了同样的问题(使用哈希表),但返回索引(而不仅仅是布尔值true/ false)。