问题是这样的:我想在一个列表里面找到某个元素的下标,这个列表的每个元素本身也是列表,比如
var arr = [[0, 1], [2, 3], [4, 5]];
var item = [0, 1];
var index = arr.indexOf(item);
console.log(index);
输出的是 -1,但是明明 arr 里面包含 [0, 1] 啊?
在 python 里面这个问题就不存在:
index = arr.index(item)
print(index)
可以输出 0。
请问在 js 中应怎么写?
1
xjp 2018-10-11 13:01:38 +08:00 via iPhone
js 里对象是引用 值一样并不一定相等 要指向同一个对象才是相等
python 本来也是这样 不过 python 有对等于计算进行重载__eq__() 值一样就认为相等 |
2
yanm1ng 2018-10-11 13:04:59 +08:00
var arr = [[0, 1], [2, 3], [4, 5]];
var item = [0, 1]; var index = arr.map(el => el.join('.')).indexOf(item.join('.')); console.log(index); |
3
crs0910 2018-10-11 13:45:40 +08:00
```
const findIndex = arr.findIndex(_ => _ + '' === item +'') ``` |
4
crs0910 2018-10-11 13:48:46 +08:00
const find = (arr, target) => arr.findIndex(_ => _ + '' === target +'')
|
5
pkokp8 2018-10-11 14:19:22 +08:00 via Android
js 是两个变量,这样就是 0 了
var item = [0, 1]; var arr = [item, [2, 3], [4, 5]]; var index = arr.indexOf(item); console.log(index); python,这两个变量指向同一个地址 id(item) id(arry[arr.index(item)]) |
6
rabbbit 2018-10-11 14:25:24 +08:00
var arr = [[0, 1], [2, 3], [4, 5]]; var getIndexFromArr = function (item, arr) { var itemLen = item.length; for (var i = 0, arrLen = arr.length; i < arrLen; i++) { if (arr[i].length !== itemLen) break; for (var j = 0, sign = true; j < itemLen; j++) { if (arr[i][j] !== item[j]) { sign = false; break; } } if (sign) return i; } return -1; } console.log(getIndexFromArr([0, 1], arr) === 0); console.log(getIndexFromArr([2, 3], arr) === 1); console.log(getIndexFromArr([4, 5], arr) === 2); console.log(getIndexFromArr([0, '1'], arr) === -1); console.log(getIndexFromArr([1, 0], arr) === -1); console.log(getIndexFromArr([0, 2], arr) === -1); console.log(getIndexFromArr([0], arr) === -1); console.log(getIndexFromArr([0, 1, 2], arr) === -1); console.log(getIndexFromArr([2, 3, 4], arr) === -1); |
7
pkokp8 2018-10-11 14:27:44 +08:00 via Android
@pkokp8
js var item = [0, 1]; var arr = [item, [2, 3], [4, 5]]; arr[0] === item;//true arr = [[0, 1], [2, 3], [4, 5]]; arr[0] === item;//false |
8
rabbbit 2018-10-11 14:50:14 +08:00
if (arr[i].length !== itemLen) break;
-> if (arr[i].length !== itemLen) continue; |
9
Hilong 2018-10-11 15:26:35 +08:00 via Android
let a = [0,1]
let b = [0,1] a===b. false |
11
auroraccc 2018-10-11 19:59:00 +08:00
因为
[0, 1] === [0, 1] 返回 false 啊 可以用 findIndex 方法: var arr = [[0, 1], [2, 3], [4, 5]]; var item = [0, 1]; var index = arr.findIndex(ele => `${ele}` === `${item}`); console.log(index); |
12
FakeLeung 2018-10-12 00:42:34 +08:00 via iPhone
|
15
g0thic 2018-10-12 09:24:27 +08:00
老哥,js 里 [0,1] == [0,1] 是返回 false 的,你理解这个就知道为啥了
|