【问题标题】:Index of array? [duplicate]数组的索引? [复制]
【发布时间】: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 中使用 findindex polyfill:var index = arr.findIndex(function(entry) { return entry.length === target.length && entry.every(function(value, index) { return value === target[index]; }); });)。

标签: javascript


【解决方案1】:

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

indexOf() 使用严格相等(与 === 或三等号运算符使用的方法相同)将 searchElement 与 Array 的元素进行比较。

有问题。在您的示例中,您有一个数组数组。与 === 运算符比较意味着它必须是相同的数组对象才能评估为真。显然它是一个不同的对象,因此在数组中找不到它。

您需要使用 Array.find() 代替可以提供测试功能的地方。见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2011-11-25
    • 2016-04-25
    • 1970-01-01
    • 2010-10-28
    • 2015-07-19
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多