繁体   English   中英

检查二维数组是否包含一维

[英]Checking if two dimensional array contains one dimensional

我有两个数组 - 一维和一个二维。

a = [[1,1],[2,2]];
b = [1,1];

我想检查“a”是否有像“b”这样的元素。 我们看到 'a' 包含 [1,1] 并且 b 是 [1,1] 所以让我们检查一下:

a.indexOf(b)

它返回-1 ,'a' 不包含 'b',我不明白。

干杯

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

要完成您想做的事情,您需要做更多的事情。 您可以遍历值并使用类似该问题答案中的内容的内容进行比较

如果在数组中找不到匹配项,则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)); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM