如何检查多维数组是否具有特定数组

How to check if a multidimensional array has a specific array?

本文关键字:数组 是否 何检查 检查      更新时间:2023-09-26

如何检查arrays是否有array

var arrays = [[1, 1], [2, 2]];
var array = [1,1];
[1, 1] === [1, 1]; // false
arrays.includes(array); // false
arrays.indexOf(array); // -1

indexOf使用严格相等(===)进行比较。你的元素必须是完全相同的对象。

var a = [1,1];
var b = [a,[1,2]];
b.indexOf(a)// 0

因为a === a

,

b.indexOf([1,1])// -1

因为[1,1]和a是不同的对象所以它们不是严格相等的

MDN文档

要做你想做的事,你需要做一些更复杂的事情。您可以循环遍历这些值并使用诸如what in this question's answers之类的内容来进行比较

indexOf如果在数组中没有找到匹配,则返回-1。你的数组a不包含元素b

编辑:

澄清@JonathanLonowski所说的,没有匹配的原因是因为您正在进行严格的比较,比较引用,而不是值。

<Array>.some方法测试多维数组中是否至少有一个数组通过提供的函数实现的测试。

<Array>.every方法测试数组中的所有数组项是否通过提供的函数实现的测试。

这两个方法结合在一起,可以检查多维数组中的所有元素是否都与所查找的元素值相等。

const checkArray = (arrays, array) => arrays.some(a => {
  return (a.length > array.length ? a : array).every((_, i) => a[i] === array[i]);
});
const arrays = [[0, 1], [2, 2], [0, 3, 2, 1]];
[
  [0, 1],          // true
  [2, 2],          // true
  [0, 3, 2, 1],    // true
  [1, 0, 3, 2, 1], // false
  [2, 2, 1],       // false
  [0, 0],          // false
  [1, 2],          // false
  [0, 1, 2]        // false
].forEach(array => {
  console.log(checkArray(arrays, array));
});