今天写一些关于数组的终极操作(骚操作)
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
基本一致。