不使用列表数据的javascript索引
我在一个叫做positions的变量中有一个索引位置列表,我想找到其中一个位置的索引,比如不使用列表数据的javascript索引,javascript,Javascript,我在一个叫做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的方法是什么
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);
});
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);
});
谢谢@blex,你说得对。OP似乎想要索引。我会更新的。谢谢@blex,你说得对。OP似乎想要索引。我会更新的。