题目
输入:var a = [1,[2,3],a,[b,c]];
输出:1,2,3,a,b,c
解决方法3种
1. 使用递归
function flat1(arr){
let res = [];
if( Array.isArray(arr) ){
arr.forEach((val)=>{
if( Array.isArray(val) ){
res.concat( flat1(val) );
}else{
res.push(val);
}
});
}
return res.join(',');
}
2. 使用toString
function flat2(item){
if(Array.isArray(item)){
item.toString = function(){
return this.join(',');
}
}
return item + '';
}
3. 使用valueOf
function flat3(item){
if(Array.isArray(item)){
item.valueOf= function(){
return this.join(',');
}
}
return item + '';
}
小结
方法2和方法3都是利用了数组的隐式类型转换。也就是在进行item + ''
时,会先调用item的valueOf方法,如果valueOf返回的不是基本类型,就会调用toString方法。