簡體   English   中英

Javascript - 用於展平數組的遞歸/for循環

[英]Javascript - recursion/for loop for flattening array

因此,這里有一個解決數組展平問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些底層功能。

該解決方案遍歷原始數組的每個元素,通過將它們放回函數中來分解任何數組元素,直到它們不再是數組並且可以推送到新數組。

我的問題是,“for”循環如何跟蹤元素通過函數放回的所有時間,並繼續循環遍歷它當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則每次元素是一個數組並被放回時,當前循環都會被縮短。 希望我的問題有意義。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

因此,這是解決陣列扁平化問題的示例解決方案。 我的問題不是“如何”展平陣列。 相反,我試圖了解此遞歸中發生的一些基本功能。

此解決方案遍歷原始數組的每個元素,通過使它們回到函數中來分解數組中的所有元素,直到它們不再是數組並可以推入新數組為止。

我的問題是,“ for”循環如何跟蹤通過函數放回元素的所有時間,並繼續循環遍歷當時正在處理的“原始”數組的其余部分? 它必須以某種方式保持跟蹤,否則,每當一個元素是一個數組並放回原位時,當前循環將被縮短。 希望我的問題有道理。

function steamrollArray(array) {
  var flatArray = [];

  flatten(array);

  function flatten(array) {
    for (var i = 0; i < array.length; i++) {
      if (Array.isArray(array[i])) {
        flatten(array[i]);
      } else {
        flatArray.push(array[i]);
      }
    }
  }

  return flatArray;
}
steamrollArray([1, [2], [3, [[4]]]]);

 let array = [1, [2], [3, [[4]]]]; const final = []; const stack = []; for (let i = 0; i < array.length; i++) { const ele = array[i]; stack.push(ele); while (stack.length) { const first = stack.shift(); if (Array.isArray(first)) { first.forEach(ele => stack.push(ele)) } else { final.push(first) } } } console.log( final.join(', '));<\/code><\/pre>

"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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