![](/img/trans.png)
[英]Why does Array.prototype.join() flatten an array of any depth?
[英]Flatten array with given depth
問題是創建一個函數,將給定的數組展平到作為參數傳遞的深度。 深度基本上是數組在數組中的深度。 所以任務是創建一個如下所示的函數:
function flatarray(arr, depth)
如果傳遞的數組是:
[1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, [13]]], 9];
對於 depth = 1,它應該返回 [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 9]。 在這里,由於深度為 1,所以它會被完全展平。
對於 depth = 2,它應該返回 [1, 2, 3, [4, 5, 6, 7, 8], [10, 11, 12, 13], 9]。 此處,由於深度為 2,因此數組內的數組應展平。
對於 depth = 3,它應該返回 [1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, 13], 9]。 等等。
const arr = [1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, 13]], 9];
function flatten(arr, depth) {
if (depth === 1) {
return flattenArr(arr);
}
let res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res.push(flatten(arr[i], depth - 1));
} else {
res.push(arr[i]);
}
}
return res;
}
function flattenArr(arr) {
let res = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flattenArr(arr[i]))
} else {
res.push(arr[i]);
}
}
return res;
}
console.log(flatten(arr, 3));
我能夠做到。 但是,不確定這是否是最好的方法。
發布此答案以防將來有人需要它。
我在sk01的答案中進行的小編輯(添加了默認參數並使用 let 而不是 var )
PS:我試圖編輯sk01的答案,但它向我顯示“建議的編輯隊列已滿”,所以我將其發布為答案
const arr = [1, 2, 3, [4, 5, [6, 7], 8], [10, 11, [12, 13]], 9]; function flatten(arr, depth = 1) { if (depth === 1) { return flattenArr(arr); } let res = []; for (let i = 0; i < arr.length; i++) { if (Array.isArray(arr[i])) { res.push(flatten(arr[i], depth - 1)); } else { res.push(arr[i]); } } return res; } function flattenArr(arr) { let res = []; for (let i = 0; i < arr.length; i++) { if (Array.isArray(arr[i])) { res = res.concat(flattenArr(arr[i])) } else { res.push(arr[i]); } } return res; } console.log(flatten(arr, 3));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.