javascript搜索数组数组

IT技术 javascript 数组 搜索
2021-01-26 21:23:41

假设我们有以下 js 数组

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

var val = [3,566,23,79];

是否有一个js内置函数或jQuery的一个,使用它可以搜索阵列ARVAL

谢谢

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

考虑到fusion 的响应,我创建了这个原型

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

你可以创建一个哈希。

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]);
}
稍微解释一下就好了。数组在用作对象键时会隐式转换为字符串。
2021-03-30 21:23:41
@stereofrog 我明白你的意思。示例数据不包括嵌套数组或字符串值。我的回答是处理特定任务的快速方法,而不是检查数组相等性的通用方法。
2021-04-12 21:23:41

您还可以使用 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]);

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;
};

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

你能试试这个吗?

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;
    }
}
很好,但是您在会抛出错误的函数之外使用了“返回”(不必要)。
2021-04-09 21:23:41
oop!我的错!我实际上编写了一个包装此代码的函数!修改。虽然返回与此无关。你可以使用break;在一个循环中
2021-04-10 21:23:41

您可以使用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);