搜索具有项目数组的项目,等等,node.js

时间:2018-11-03 17:13:15

标签: arrays node.js recursion

想象一下,我有一个包含项数组的项,而数组中的任何项都包含项数组,依此类推。 所以我有无限个项目,我想知道如何在node.js中找到所有项目。 像这样:

    Item1
     /     \
   Item2    Item3
            /    \
          Item4   Item5

Item1是一个数组。 Item2和Item3还有另一个数组,依此类推。

1 个答案:

答案 0 :(得分:0)

  

我有一个包含一系列项目的项目...我想知道如何获取所有项目

如果是数组,则递归展平数组中的每个元素,否则追加它。

/* setup test input */
const tree = [
  "leaf_A_1",
  "leaf_A_2",
  [
    "leaf_B_1",
    "leaf_B_2",
    [
      "leaf_C_1",
      "leaf_C_2",
    ]
  ]
]
console.log("INPUT:\n", tree)

/* run test */
const leaves = flatten(tree)
console.log("OUTPUT:", leaves) // outputs leaf nodes in a flat array

// flatten() is a recursive function takes an array that *may* contain nested arrays, and returns an array containing all leaf elements without nesting.
function flatten(arr) {
  return arr.reduce(expandNestedArraysOrAppend, [])
}

function expandNestedArraysOrAppend(accum, element, idx) {
  if (Array.isArray(element)) {
    return [...accum, ...flatten(element)] // if we have an array, flatten it before appending
  }
  return [...accum, element]               // if not an array, just append
}

希望这会有所帮助。干杯!