数组降维
1). Array.prototype.concat.apply([],arr)
通过采用的是apply方法,自动打散参数,再concat拼接,
注释:apply() 方法接受数组形式的参数。
如果要使用数组而不是参数列表,则 apply() 方法非常方便。
let arr=[1,2,[3,4,5]]
默认只能处理二维数组降维处理
Array.prototype.concat.apply([],arr)//[1,2,3,4,5]
封装后可以进行多维数组降维处理
let recursion=function(arr){
let len=arr.length,newarr=[];
for(let i=0;i<len;i++){
if(Array.isArray(arr[i]))
newarr.push.apply(newarr,recursion(arr[i]))
else newarr.push(arr[i])
}
return newarr
}
- 扩展
let flatten = arr => arr.reduce((begin,current)=>{
// begin--[] 这个空数组是我们传入的
Array.isArray(current) ? begin.push(...flatten(current)) : begin.push(current);
// 是数组在进行递归操作,否则进行push到begin中
return begin
},[])
- flat
默认与上面Array.prototype.concat.apply([],arr)一样
const arr = [[1, 3, 4], [2, 3], 2, [2, [3, 5]]]
默认只能处理二维数组降维处理
arr.flat()//[1, 3, 4, 2, 3, 2, 2, [3, 5]]
flat()括号里写2扁平化处理二维数组。第三维数组不会进行扁平化处理
arr.flat(2)//[1, 3, 4, 2, 3, 2, 2, 3, 5]
// 数组扁平化 Infinity --- 不管有多少我一次性降维知道没有为止
arr.flat(Infinity)//[1, 3, 4, 2, 3, 2, 2, 3, 5]
// 扁平化、去重
new Set(arr.flat(Infinity)) //{1, 3, 4, 2, 5}
// Array.from(),对象转数组,
// 数组 扁平化、去重
Array.from(new Set(arr.flat(Infinity))) //[1, 3, 4, 2, 5]
// 数组 扁平化、去重 、排序
Array.from(new Set(arr.flat(Infinity))).sort((a, b) => a - b) // [ 1, 2, 3, 4, 5 ]
-
扩展 Set
Set特点:
-
类似于数组,没有重复的元素(唯一的)
-
开发中用于去除重复数据
-
key和value都是相等的
-
Set属性:size[长度]、add(支持链式添加)[添加元素]、delete(不支持链式删除)[删除元素]、has[包含元素]返回值是boolean类型;
let a = new Set([1, 2, 3]), b = new Set([4, 5, 6, 2])
// 并集
console.log(new Set([...a, ...b]))// Set(6) {1, 2, 3, 4, 5, …}
// 交集
console.log(new Set([...a].filter(x => b.has(x))))// Set(1) {2}
// 差集
console.log(new Set([...a].filter(x => !b.has(x))))// Set(2) {1, 3}
// 遍历
let set0=new Set([1,2,5,3,4,2]) // Set(5) {1, 2, 5, 3, 4}
set0.forEach((value,index)=>{console.log(value,index)}) // 1 1, 2 2, 5 5, 3 3, 4 4
--- end ---
网友评论