题目
对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。
如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Array.isArray()
steamroller([[["a"]], [["b"]]]) 应该返回 ["a", "b"]。
steamroller([1, [2], [3, [[4]]]]) 应该返回 [1, 2, 3, 4]。
steamroller([1, [], [3, [[4]]]]) 应该返回 [1, 3, 4]。
steamroller([1, {}, [3, [[4]]]]) 应该返回 [1, {}, 3, 4]。
思路
- 看到题目提示,其实应该就是将嵌套的数组提到第一层;
- 需要用到 Array.isArray()来判断arr的某一个元素是否是数组;
- 如果是数组,则需要用到 concat 合并到新的数组;如果不是数组,则直接 push 到新的数组中;
解答
function steamroller(arr) {
// I'm a steamroller, baby
var len = arr.length;
var temp =[];
for(var i =0;i<len;i++){
if(Array.isArray(arr[i])){
temp=temp.concat(steamroller(arr[i]));
} else{
temp.push(arr[i]);
}
}
return temp;
}
steamroller([1, [2], [3, [[4]]]]);
- 用到的2个函数 concat 是针对数组进行合并;push则是给数组添加新的元素;