一道有趣的JS題(1 - 妙用隱式型別轉換)
阿新 • • 發佈:2018-11-06
題目
輸入: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 + ''