3

如何检查是否arraysarray

var arrays = [[1, 1], [2, 2]];
var array = [1,1];

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

3 回答 3

4

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 文档

为了做你想做的事,你需要做更多的事情。您可以遍历这些值并使用类似于此问题答案中的内容来进行比较

于 2013-03-26T00:54:08.790 回答
1

indexOf如果在数组中找不到匹配项,则返回 -1。您的数组a不包含 element b

编辑:

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

于 2013-03-26T00:47:36.463 回答
0

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

于 2021-12-23T16:24:20.303 回答