gpt4 book ai didi

javascript indexOf 不适用于列表数据

转载 作者:行者123 更新时间:2023-11-28 17:50:32 25 4
gpt4 key购买 nike

我在名为positions的变量中有一个索引位置列表,我想找到其中一个位置的索引,例如...

positions[0]
(2) [0, 0]

positions.indexOf([0,0]);
-1

var item = positions[0]
undefined

item
(2) [0, 0]0: 01: 0length: 2__proto__: Array(0)concat: ...

positions.indexOf(item);
0

在这种情况下使用indexOf的方法是什么?

最佳答案

indexOf 方法使用严格比较来查找其匹配项。这与 === 使用的比较算法相同,它比较对象类型(如数组)的身份。因此,当您传递 [0,0] 时,您将传递一个具有自己标识的新对象,因此找不到匹配项。

这就是当您专门搜索索引 0 处的项目时它会起作用的原因。您现在正在查找具有相同标识的数组。

为了使其按照您想要的方式工作,您需要使用考虑数组成员的自定义对象比较。 JavaScript 没有内置类似的东西,但是如果您搜索“深度相等比较”,您会找到解决方案。

一旦有了比较函数,您就可以使用 .findIndex() 在每个对象上运行它。

var data = [0, 0];
var result = positions.findIndex(function(item) {
// return result of comparing `data` with `item`

// This simple implementation assumes that all `item`s will be Arrays.
return data.length === item.length &&
item.every(function(n, i) { return n === data[i] });
});
<小时/>

严格来说,如果positions的成员都是以数字为成员的数组,则可以使用JSON.stringify()来执行比较。但如果要比较的成员属于其他对象类型,请不要相信它。它可能看起来有效,但可能会失败,恕不另行通知。

var data = JSON.stringify([0, 0]);
var result = positions.findIndex(function(item) {
return data === JSON.stringify(item);
});

关于javascript indexOf 不适用于列表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com