我正在通過查看 freecodecamp 中問題的不同答案來學習,我遇到了這個我無法弄清楚最后一部分的答案:
function steamrollArray(arr) {
const flat = [].concat(...arr);
return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}
console.log(steamrollArray([[3, [[4]]]]));
為什么它在“else :”之后說“flat”,就像那是什么意思?它只是提到了原始陣列,沒有像 .push() 或其他方法那樣發生任何事情。
uj5u.com熱心網友回復:
與 return 的行基本上是:
- 如果陣列中至少有一項
flat是另一個陣列,它會處理steamrollArray(所以這是一個遞回函式) - 如果該
some方法回傳 false,它將按原樣回傳平面變數。flat 變數最終將是一個數字,這意味著.some將回傳 false 并退出一級遞回,依此類推。
運行代碼更容易理解,還有關于.some() JS 函式的檔案。
function steamrollArray(arr) {
const flat = [].concat(...arr);
return flat.some(Array.isArray) ? steamrollArray(flat) : flat;
}
console.log(steamrollArray([[3, [[4]]]]));
//output = [3,4]
uj5u.com熱心網友回復:
它指的是這一行中的原始平面變數:
const flat = [].concat(...arr);
如果此行為假,將回傳:
flat.some(Array.isArray)
uj5u.com熱心網友回復:
關鍵是return前面的運算式:flat沒有被修改,因為它是平面的并且準備好作為函式的最終值回傳。
我認為該功能可以更清楚地改寫如下:
function steamrollArray(arr) {
const flat = [].concat(...arr);
if (flat.some(Array.isArray)) { // check if the array is not flat
return steamrollArray(flat); // if it is not flat, process it more
}
return flat; // return a completely flat array
}
console.log(steamrollArray([[3, [[4]]]]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459408.html
標籤:javascript if 语句
