Js数组扁平化实现方法代码总汇
题目:
请写出一个数组拍平函数。效果如下:
vararr=['a',['b','c'],2,['d','e','f'],'g',3,4];
flat(arr)//a,b,c,2,d,e,f,g,3,4
方法一:使用toString方法先将arr转换为一个字符串,再以split分割为数组,再将数组里面的元素转换为数字类型
vararr=['a',['b','c'],2,['d','e','f'],'g',3,4];
functionflat(arr){
returnarr.toString().split(',').map(function(item){
returnNumber(item)
})
}
console.log(flat(arr))
方法二:toString格式转换与方法一类似都是隐士类型转换
vararr=['a',['b','c'],2,['d','e','f'],'g',3,4];
//方法二:toString(格式转换)
varflag=function(arr){
lettoString=Array.prototype.toString;
Array.prototype.toString=function(){
returnthis.join(',');
};
letresult=arr+'';
Array.prototype.toString=toString;
returnresult;
};
console.log(flag(arr));
方法三:valueOf(格式转换)与方法一二类似都是隐士类型转化原理
//方法三:valueOf(格式转换)
Array.prototype.valueOf=function(){
returnthis.join(',');
};
varflat=function(arr){
returnarr+'';
};
console.log(flat(['a',['b','c'],2,['d','e','f'],'g',3,4]));
方法四:利用reduce特性
functionflat(arr){
returnnewArr=arr.reduce((a,b)=>{
returna.concat(b)
},[])
}
vararr=['a',['b','c'],'2',['d','e','f'],'g',3,4];
console.log(flat(arr));
方法五:利用递归
functionflat(array){
varresult=[];
vareach=function(arr){
arr.forEach(item=>{
if(iteminstanceofArray){
each(item);
}else{
result.push(item);
}
});
};
each(array);
returnresult.join(',');
}
vararr=['a',['b','c',[7,8]],2,['d','e','f'],'g',3,4];
console.log(flat(arr));
方法六:ES6的遍历器Iterator给数据结构增加遍历器必须增加一个next方法
//Iterator
Array.prototype[Symbol.iterator]=function(){
letarr=[].concat(this);
//arr=['a',['b','c'],'2',['d','e','f'],'g',3,4]
letgetFirst=function(array){
letfirst=array.shift();
if(firstinstanceofArray){
if(first.length>1){
arr=first.slice(1).concat(array);
}
first=first[0];
}
returnfirst;
};
return{
next:function(){//类似与遍历
letitem=getFirst(arr);
if(item){
return{
value:item,
done:false,
};
}else{
return{
done:true,
};
}
},
};
};
varflat=function(arr){
letr=[];
for(letiofarr){
r.push(i);
}//i已经是单个元素
returnr.join(',');
};
vararr=['a',['b','c'],'2',['d','e','f'],'g',3,4];
console.log(flat(arr));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。