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));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。