Steamroller
//if 和else 中的返回值要注意同类型
//一个是单个数
//一个是整个for 的结果
//递归的返回值可能是单个数,也可能是for 的全部结果
//深一层的返回值要合并当前层的值,再返回给上一层
function steamrollArray(arr) {
//元素是否是一个数组
if(arr instanceof Array ===false){
return [arr]
}
else{
let r= []
for(let i= 0; i<arr.length; i++)
r=[...r,...steamrollArray(arr[i])]
return r
}
}
steamrollArray([1, [2], [3, [[4]]]]);
//最终return 不一定非得在前面
function steamrollArray(arr) {
//元素是否是一个数组
if(arr instanceof Array){
let r= []
for(let i= 0; i<arr.length; i++)
r=[...r,...steamrollArray(arr[i])]
return r
}
else{
return [arr]//在下面最终return 也行
}
}
steamrollArray([1, [2], [3, [[4]]]]);
测试数据:
steamrollArray([[["a"]], [["b"]]]) should return ["a", "b"]. steamrollArray([1, [2], [3, [[4]]]]) should return [1, 2, 3, 4]. steamrollArray([1, [], [3, [[4]]]]) should return [1, 3, 4]. steamrollArray([1, {}, [3, [[4]]]]) should return [1, {}, 3, 4].
//别人家的孩子
function steamrollArray(arr) {
let flat = [].concat(...arr);
return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}
steamrollArray([1, [2], [3, [[4]]]]);
//数组也是字符串嘛 666
[2,3,[5,[9,3],4]].toString()
//"2,3,5,9,3,4"
function steamrollArray(arr) {
return arr
.toString()
.replace(",,", ",") // "1,2,,3" => "1,2,3"
.split(",") // ['1','2','3']
.map(function(v) {
if (v == "[object Object]") {
// bring back empty objects
return {};
} else if (isNaN(v)) {
// if not a number (string)
return v;
} else {
return parseInt(v); // if a number in a string, convert it
}
});
}