JS 面試之陣列的幾個不 low 操作
今天寫一些關於陣列的終極操作(騷操作)
1.扁平化n維陣列
[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扁平陣列的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新出來的一種一種定義不重複陣列的資料型別。
Array.from
是將類陣列轉化為陣列。
...
是擴充套件運算子,將set
裡面的值轉化為字串。
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內建的排序方法,引數為一個函式
4.最大值
Math.max(...[1,2,3,4]) // 4 Math.max.apply(this,[1,2,3,4]) // 4
Math.max()
是Math
物件內建的方法,引數是字串。
5.求和
[1,2,3,4].reduce(function(pre,cur,curIndex,arr){ return pre+cur },0)// 10
reduce
是ES5的陣列api,引數有函式和預設初始值。
函式有四個引數:
pre cur curIndex arr
6.判斷是否包含值
[1,2,3].includes(4) //false [1,2,3].indexOf(4)// -1 如果存在換回索引 [1,2,3].find( item => item === 3) // 3 如果陣列中無值返回undefined [1,2,3].findIndex( item => item === 3) //2 如果陣列中無值返回-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.每一項設定值
[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.過濾陣列
[1,2,3].filter(item => {return item>2})//[3]
filter
是ES6的api,返回滿足新增的項的陣列。
12.物件轉化陣列
Object.values({name:'凱GG',age:18}) //["凱GG", 18] Object.entries({name:'凱GG',age:18}) //["name", "凱GG"],["age", 18]
Object.values
是ES6的api,Object.values
方法返回一個數組
Object.entries
是ES6的api,Object.entries
除了返回值不一樣,該方法的行為與Object.values
基本一致。