我想扁平化一個陣列,遞回函式呼叫自身直到最后一個元素陣列而不是最后一個元素字串,我覺得我在理解遞回如何作業時缺少一些重要的東西,字串本身沒有添加到空陣列中。
const nested = [[[[[['string']]]]], 5, '7'];
const funcTest = function (arr) {
const final = [];
arr.forEach(el => {
if (Array.isArray(el)) {
console.log(el);
funcTest(el);
} else final.push(el);
});
return final;
};
console.log(funcTest(nested));
uj5u.com熱心網友回復:
您可以拼合所有嵌套陣列,平回吐論證depth的Infinity:
const nested = [[[[[["string"]]]]], 5, "7"];
nested.flat(Infinity); //['string', 5, '7']
depth:指定嵌套陣列結構應展平的深度級別。默認為 1。
uj5u.com熱心網友回復:
您需要添加遞回呼叫的結果。
const
nested = [[[[[['string']]]]], 5, '7'];
const funcTest = function (arr) {
const final = [];
arr.forEach(el => {
if (Array.isArray(el)) {
console.log(el);
final.push(...funcTest(el)); // <-
} else final.push(el);
});
return final;
};
console.log(funcTest(nested));
另一種遞回方法:
const
nested = [[[[[['string']]]]], 5, '7'];
flatValues = item => Array.isArray(item)
? item.flatMap(flatValues)
: item;
console.log(flatValues(nested));
uj5u.com熱心網友回復:
這里的問題是您不使用遞回funcTest呼叫的回傳值。
你想做什么:
const superFlat = (arr) => {
const result = [];
arr.forEach((item) => {
if (!Array.isArray(item)) result.push(item);
else result.push(...superFlat(item));
});
return result;
}
或者只是使用 arr.flat(Infinity)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358972.html
標籤:javascript
