首先數(shù)組有flat方法
var newArray = arr.flat([depth]) //depth為扁平化的深度
console.log( [0, 1, 2, [3, 4]].flat(2)); //打印 [0, 1, 2, [3, 4]]
但是我們不用
一联贩、簡單版,二維數(shù)組降重(flat())
1.
function Flat1(arr){
return [].concat.apply([],arr);
// [].concat(...arr);
2.
//用不了捎拯,會報錯
function Flat1(arr){
arr.reduce((cur,item)=>{
cur.concat(item)
})
二撑蒜、多重版
1、遞歸
function myFlat(arr){
var res=[];
for(var i = 0;i<arr.length;i++){
if(arr[i] instanceof Array){
res= res.concat(myFlat(arr[i]))
}else{
res.push(arr[i])
}
}
return res;
}
2、Es6
const myFlat=function(arr){
return arr.reduce((res,item)=>{
return res.concat(Array.isArray(item)?myFlat(item):item);
},[])
}
踩坑:注意reduce的用法座菠!
三、去重
1藤树、 Set
const unique1=arr=>Array.from(new Set(arr));
2浴滴、filter
const unique2=arr=> {
if(!arr || arr===[]) return arr;
return arr.filter((item,index,self)=>self.indexOf(item)===index);
}
踩坑:注意filter的用法,是指過濾出指定的item全部放入新的數(shù)組里
3岁钓、reduce(reduce很強(qiáng))
const unique3=arr=>arr.reduce((acc,cur)=>{
if(!acc.includes(cur)){
acc.push(cur);
}
return acc;
},[])
//踩坑升略,reduce里的函數(shù)一定要有返回值不能寫成
const unique3=arr=>arr.reduce((acc,cur)=>{
if(!acc.includes(cur)){
return acc.push(cur);
}
},[])
4、循環(huán),利用hashTable
function unique4(arr){
let table={};
for(let i=0;i<arr.length;i++){
//踩坑屡限,hashTable品嚣,也就是對象,當(dāng)跟據(jù)不存在的key找value時钧大,value為undefined翰撑。
//但是考慮到value為undefined,key也有可能存在啊央,故用一下語法判斷
if(!(arr[i] in table)){
table[arr[i]]=arr[i];
}
}
let res=[];
//踩坑眶诈,對象的key永遠(yuǎn)為字符串,且對象不能用let item of table遍歷!
for(let key in table){
res.push(table[key])
}
return res;
}