有什么方法可以检查数组是否包含具有特定值的数组?
就像,我有这个数组
drawn[0] = [0,0]
后来我想检查是否仍然包含[0,0]
,所以我会做类似的事情
drawn[0] == [0,0]
但这只是返回一个false
,为什么?而且,更重要的是,我应该怎么做呢?即使我尝试[0,0] == [0,0]
我也会得到false
回报?
请注意,数组并不总是零......
附言。我不想使用任何外部库,所以请保持纯 ol' javascript
有什么方法可以检查数组是否包含具有特定值的数组?
就像,我有这个数组
drawn[0] = [0,0]
后来我想检查是否仍然包含[0,0]
,所以我会做类似的事情
drawn[0] == [0,0]
但这只是返回一个false
,为什么?而且,更重要的是,我应该怎么做呢?即使我尝试[0,0] == [0,0]
我也会得到false
回报?
请注意,数组并不总是零......
附言。我不想使用任何外部库,所以请保持纯 ol' javascript
每个人都说你不能比较数组,因为它们是对象。那是真实的。您有几个可行的解决方案,包括嵌套循环(公然或抽象)。其他人也提出了这个建议。
一个可能更简单的替代方法是比较toString
两个数组的值:
drawn[0].toString() == [0,0].toString()
这确实要求数组内容的顺序相同。
JavaScript 中的数组只有在它们是同一个对象时才彼此相等。
您需要进行内容检查:
if (drawn[0].every(function(item) { return item === 0; })) {
// all entries are zero.
}
也可以看看:Array.every()
或者在您的特定情况下,只需:
if (drawn[0][0] === 0 && drawn[0][1] === 0) {
// equal to [0, 0]
}
使用 for 循环检查,您无法与简单的比较进行比较,因为它比较的是引用而不是值:
[0] !== [0] // true
[0][0] == [0][0] //true
对象(包括数组)通过对象标识进行比较。每次编写[0, 0]
时都会创建一个新数组;所以他们注册为不同的对象。您需要自己遍历元素并检查元素是否相同。