【发布时间】:2020-01-20 11:45:41
【问题描述】:
我有简单的嵌套数组,例如:
var arr = [[75.0], [65.0]] ;
当我这样做时:
arr.indexOf( [75.0] );
我期望 0,但我得到 -1,什么给出?
【问题讨论】:
-
在您的控制台中试试这个:
[1] == [1]。出于同样的原因。 -
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…:“如果两个操作数都是对象,那么 JavaScript 会比较相等的内部引用当操作数引用内存中的同一个对象时。”我>
-
请查看Array#findIndex。
-
indexOf使用===匹配来查看您提供的内容是否与数组中的内容匹配。没有两个单独的数组彼此是===([75.0] === [75.0]是false),即使这些数组具有相同的内容。要查找 equivalent 数组的索引,您需要使用findIndex并提供一个回调来检查数组是否具有相同的内容,例如(假设target是要查找):const index = arr.findIndex(entry => entry.length === target.length && entry.every((value, index) => value === target[index]));. -
(或者在 ES5 中使用
findindexpolyfill:var index = arr.findIndex(function(entry) { return entry.length === target.length && entry.every(function(value, index) { return value === target[index]; }); });)。
标签: javascript