为什么二维数组的索引返回-1
Why does this index of a two dimensional array return -1
我有以下代码:
alert( [[0,1],[1,0]].indexOf([0,1]) );
即使数组[0,1]是二维数组的一个元素,我也会返回值"-1"。我在生活中做错了什么?
它找不到您的元素,因为[0, 1]
和[0, 1]
不等于4
和4
。
console.log(4 === 4); // true
console.log([0, 1] === [0, 1]); // false
当您对object
类型的事物进行相等性检查时,Javascript将使用所谓的引用相等性。它检查这两个对象是否实际上是相同的实例。
var a = [0, 1];
var b = [1, 0];
var arr = [a, b];
console.log(arr.indexOf(a)); // 0
console.log(a === arr[0]); // true
或者,您可以使用深度相等检查编写自己的搜索函数。
function deepSearch(arr, element) {
for(var index = 0; index < arr.length; index++) {
if(deepEqual(arr[index], element)) {
return index;
}
}
return -1;
}
简短的回答:因为[0,1] === [0,1]
就是false
。
根据.indexOf
文件,
indexOf()
使用严格相等(===或三重相等运算符使用的方法相同)比较Array的searchElement
和elements
。
您可以使用一个技巧来序列化您的子数组和目标项
它起作用,因为[0,1] !== [0,1]
,但"[0,1]" === "[0,1]"
:
Array.prototype.indexOfForArrays = function(search)
{
var searchJson = JSON.stringify(search); // "[0,1]"
var arrJson = this.map(JSON.stringify); // ["[3,4]", "[0,1]", "[1,0]"]
return arrJson.indexOf(searchJson);
};
document.body.innerText = [[3,4], [0,1], [1,0]].indexOfForArrays([0,1]);
还有其他一些方法。这个堆栈溢出问题可能很有用。
相关文章:
- 在从索引位置返回的字符串中查找空白
- 使用共享工具提示时,单击Highcharts柱形图会返回不正确的序列索引
- 如何比较两个数组,然后返回差异的索引
- 在 jquery 选项卡中查找 span 标记并返回该索引
- 如何获取从循环返回的元素的索引
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 通过getElementById查找所选索引是't返回正确的值
- 按流星空格键模板中的索引返回数组项
- 辅助功能键盘专用选项卡到z索引“;返回顶部”;
- JavaScript:通过其他数组元素的索引访问ArrayElement?array[array[0]返回undefin
- 如果我对索引进行硬编码,它会按预期工作,为什么这个增量器会返回NAN
- 为什么不't此循环返回到第一个索引
- Javascript 返回索引的负数
- 如何检查数组中的重复值并用JavaScript返回索引
- 我如何从PHP返回索引二维数组到JavaScript
- 为什么这个jQuery返回索引3
- Angular ng-options返回索引而不是对象值
- 当字符匹配模式时从数组返回索引
- Javascript承诺递归返回索引
- jQuery.每个返回索引数组