簡體   English   中英

用給定深度展平數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM