我有两个嵌套数组的数组。
var array = [ [a,b,c], [a,b,c] ]
尽管数组元素相同,但以下代码返回 true :
if (array[0] !== array[1]) {
console.log(array[0])
console.log(array[1])
}
// [a,b,c]
// [a,b,c]
以下代码返回 false :
if (array[0] === array[1]) {
console.log(array[0])
console.log(array[1])
}
似乎是在比较指数而不是元素。
这里发生了什么?
有时我会将3个或甚至4个嵌套数组相互比较。例如,if ( array[0] === array[1] || array[0] === array[2] || array[1] === array[2] ) // do this
。值得注意的是,a
和c
始终是对实际HTML元素的引用,而b
将是一个数字。现在有没有一种简单的方法来实现这一目标?
答案 0 :(得分:1)
您正在比较对象引用,而不是对象值。指向内存的指针是不同的,因此比较是错误的。
这是一个在数组中使用html元素的简单示例。
<input id="lease_calculator_term_48" data-calculator-input="term" class="update_calculator" type="radio" value="48" name="lease_calculator[term]">
<input id="lease_calculator_term_60" data-calculator-input="term" class="update_calculator" disabled="disabled" type="radio" value="60" checked="checked" name="lease_calculator[term]">
var a1 = document.querySelectorAll('div');
var a2 = document.querySelectorAll('div');
var a3 = document.querySelectorAll('div');
var array = [Array.from(a1),Array.from(a2),Array.from(a3)];
console.log(array[0].every((v,i) => array.slice(1).every(ai => v == ai[i])));