function steamroller(arr) {
// I'm a steamroller, baby
var resultArr = [];
for(var i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
resultArr = resultArr.concat(steamroller(arr[i]));
}else{
resultArr.push(arr[i]);
}
}
return resultArr;
}
题目:
对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。steamroller([1, [], [3, [[4]]]])
应该返回 [1, 3, 4]
。
分析:
实际应用中你并不知道这个数组里面嵌套了几个数组(arr.length),也不知道嵌套了多深(使用递归较为方便),
Array.isArray()这个函数可以判断传进去的参数类型是不是数组。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
Array.prototype.push()函数将一个或多个元素添加到数组的末尾,并返回新数组的长度。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/push
Array.prototype.concat()函数可以将两个数组拼接为一个数组,且维度不变。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
因为递归函数的返回值是同一个,所以类型都是数组且是一维的。所以使用concat而不使用push来拼接最后进栈的函数返回的数组。