84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我现在要对一个二维数组进行操作,如题,如果不存在就进行push操作,所以不是对已经存在的数组去重试过indexOf,返回-1,es6的includes,返回false,有什么原生的方法可以判断出来么,并且能解释一下为什么直接的includes不行么
人生最曼妙的风景,竟是内心的淡定与从容!
数组是引用类型,所以 [1,2,3]===[1,2,3] 是 false. 因此 indexOf 和 includes 自然判断不出来。如果你数组内部是值类型的话可以
[1,2,3]===[1,2,3]
false
indexOf
includes
[[1, 2, 3], [1, 2, 3]].filter(function (arr) { return JSON.stringify(arr) === JSON.stringify([1, 2, 3]); }).length;
如果这个值大于 0 说明包含这个待比较的数组。
Another update:
[[1, 2, 3], [1, 2, 3]].some(function (arr) { return JSON.stringify(arr) === JSON.stringify([1, 2, 3]); });
这次返回 true 就说明包含待比较的数组。(灵感来自本题的另一个 answer)
true
因为includes在判断相等时如果是对象比较的是引用。想要成功你得这样:
或者:
var arr = [[1,2,3],[1,2,3]]; JSON.stringify(arr).includes([1,2,3].toString()) // 返回true or arr.toString().includes([1,2,3].toString()) // 返回true 要兼容的话可以这样: var arr = [[1,2,3],[1,2,3]]; arr.some(function(v) {return v.toString() === [1,2,3].toString()}) // true or arr.toString().match([1,2,3].toString()).length > 0 // true
数组是引用类型,所以
[1,2,3]===[1,2,3]
是false
. 因此indexOf
和includes
自然判断不出来。如果你数组内部是值类型的话可以
如果这个值大于 0 说明包含这个待比较的数组。
Another update:
这次返回
true
就说明包含待比较的数组。(灵感来自本题的另一个 answer)因为includes在判断相等时如果是对象比较的是引用。想要成功你得这样:
或者: