//find findIndex
数组实例的find
方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true
的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined
。
find的回调函数也可以接受三个参数item,index,arr
console.log([1,2,3,4,5,6,-9].find(n=>n<0)) // -9 console.log([1,2,3,4,5,6,-9].find(n=>n>10)) // undefined
数组实例的findIndex
方法的用法与find
方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
。
console.log([1,2,3,4,5,6,-9].findIndex(n=>n<0)) // 6 console.log([1,2,3,4,5,6,-9].findIndex(n=>n>10)) // -1
这两个方法都可以接受第二个参数,用来绑定回调函数的this
对象。
var arr=[1,2,3,4,5,10,11,22] function f(v) { return v>this.age } var person={ age:10, name:'stupidcc' } arr.find(f,person) // 11
另外,这两个方法都可以发现NaN
,数组的indexOf
方法是无法做到的
console.log([NaN].indexOf(NaN)) //-1 无法识别NaN (主要是因为NaN==NaN是false) console.log([NaN].find(n=>Object.is(NaN,n))) //NaN 找到了NaN (因为Object.is(NaN,NaN)是true) console.log([NaN].findIndex(n=>Object.is(NaN,n)))//0 找到了NaN的下标
遍历方法 entries() keys() values()
可以用for...of
循环进行遍历,唯一的区别是keys()
是对键名的遍历、values()
是对键值的遍历,entries()
是对键值对的遍历。
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
includes
表示某个数组是否包含给定的值,与字符串的includes
方法类似
[1, 2, 3].includes(2) // true
[1, 2, 3].includes(4) // false
[1, 2, NaN].includes(NaN) // true
flat() flatMap()
对于二维三维的数组,用于将嵌套的数组“拉平”,变成一维的数组。
该方法返回一个新数组,对原数据没有影响。
flat()
默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()
方法的参数写成一个整数,表示想要拉平的层数,默认为1。
console.log([1,2,[3,4]].flat()) //[1,2,3,4] console.log([1,2,[3,4,[5]]].flat()) //[1,2,3,4,[5]] console.log([1,2,[3,4,[5]]].flat(2))//[1,2,3,4,5] console.log([1,2,[3,4,[5,[6]]]].flat(Infinity))//[1,2,3,4,5,6] 不管多少层都拉平
如果原数组有空位,flat()
方法会跳过空位。这个方法可以用来清除一维数组的空数据
console.log([1,,2,,3,4].flat()) //[1,2,3,4]
flatMap()
方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()
),然后对返回值组成的数组执行flat()
方法。该方法返回一个新数组,不改变原数组