<!DOCTYPE html>
<html>
<script>
const newArr = [];
function _flatten(arr){
arr.forEach(val => {
console.log(`start: ${val}`);
if(Array.isArray(val)){
_flatten(val);
}else{
console.log(`push start...${val}`);
newArr.push(val);
}
});
}
_flatten(arr);
return newArr;
}
let res = flatten([1,[2],[3,[4]]]);
console.log(res);
alert(res); // [1,2,3,4]
</script>
</html>
以上是可以正確返回的代碼。
但是,前一個版本,總是不能有正確的返回,總是返回[].
檢查看,是因缺少函數調用:_flatten(arr);
想着,可不可以自身調用?
function flatten(arr) {
const newArr = [];
(function (arr) {
function _flatten(arr) {
arr.forEach(val => {
console.log(`start: ${val}`);
if (Array.isArray(val)) {
_flatten(val);
} else {
console.log(`push start...${val}`);
newArr.push(val);
}
});
}
})(arr);
// _flatten(arr);
return newArr;
}
還是返回[].
等道行深了好好研究下這個自調用吧。