Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不使用列表数据的javascript索引_Javascript - Fatal编程技术网

不使用列表数据的javascript索引

不使用列表数据的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的变量中有一个索引位置列表,我想找到其中一个位置的索引,比如

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似乎想要索引。我会更新的。