今天寫一些關(guān)于數(shù)組的終極操作(騷操作)
1.扁平化n維數(shù)組
[1,[2,3]].flat() //[1,2,3]
[1,2,[3,4,[5,6,[7,8]]]].flat(Infinity) // [1, 2, 3, 4, 5, 6, 7, 8]
Array.flat(n)
是ES10扁平數(shù)組的api脖律, n
表示維度谢肾,n
值為 Infinity
時維度為無限大。
2.去重
Array.from(new Set([1,2,3,3,4,4])) //[1, 2, 3, 4]
[...new Set([1,2,3,3,4,4])] //[1, 2, 3, 4]
set
是ES6新出來的一種一種定義不重復數(shù)組的數(shù)據(jù)類型小泉。
Array.from
是將類數(shù)組轉(zhuǎn)化為數(shù)組芦疏。
...
是擴展運算符,將set
里面的值轉(zhuǎn)化為字符串微姊。
3.排序
[1,2,6,5,3,4,12,43,23].sort((a,b) => a-b ) // [1, 2, 3, 4, 5, 6, 12, 23, 43]
sort
是js內(nèi)置的排序方法,參數(shù)為一個函數(shù)
4.最大值
Math.max(...[1,2,3,4]) // 4
Math.max.apply(this,[1,2,3,4]) // 4
Math.max()
是 Math
對象內(nèi)置的方法酸茴,參數(shù)是字符串。
5.求和
[1,2,3,4].reduce(function(pre,cur,curIndex,arr){
return pre+cur
},0) // 10
reduce
是ES5的數(shù)組api兢交,參數(shù)有函數(shù)和默認初始值薪捍。
函數(shù)有四個參數(shù):
-
pre
:上一次的返回值 -
cur
:當前值 -
curIndex
:當前值索引 -
arr
:當前數(shù)組
6.判斷是否包含值
[1,2,3].includes(4) //false
[1,2,3].indexOf(4) // -1 如果存在換回索引
[1,2,3].find( item => item === 3) // 3 如果數(shù)組中無值返回undefined
[1,2,3].findIndex( item => item === 3) //2 如果數(shù)組中無值返回-1
includes()
、find()
、findIndex()
是ES6的api酪穿。
7.合并
[1,2,3,4].concat([5,6]) // [1,2,3,4,5,6]
[1,2,3,4,...[5,6]] // [1,2,3,4,5,6]
8.每一項設(shè)置值
[1,2,3].fill(false) //[false, false, false]
fill()
是ES6的方法凳干。
9.每一項是否滿足
[1,2,3].every(item =>{return item > 2} ) //false
every
是ES5的api,,每一項滿足返回 true
被济。
10.有一項滿足
[1,2,3].some(item =>{return item >2}) //true
some
是ES5的api救赐,有一項滿足返回 true
。
11.過濾數(shù)組
[1,2,3].filter(item => {return item>2}) //[3]
filter
是ES6的api只磷,返回滿足添加的項的數(shù)組经磅。
12.對象轉(zhuǎn)化數(shù)組
Object.values({name:'凱GG',age:18}) //["凱GG", 18]
Object.entries({name:'凱GG',age:18}) //["name", "凱GG"],["age", 18]
Object.values
是ES6的api,Object.values
方法返回一個數(shù)組
Object.entries
是ES6的api,Object.entries
除了返回值不一樣,該方法的行為與Object.values
基本一致钮追。