84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我现在要对一个二维数组进行操作,如题,如果不存在就进行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在判断相等时如果是对象比较的是引用。想要成功你得这样:
或者: