JavaScript:如何在它们的功能之外循环遍历这些项目?

JavaScript: how do I loop through these items outside of their function?

这是输入:

[ 'markdown',
  [ 'para', '“a paragraph”' ],
  [ 'hr' ],
  [ 'para', '\'another paragraph\'' ],
  [ 'para', 'test--test' ],
  [ 'para', 'test---test' ],
  [ 'bulletlist',
    [ 'listitem', '“a list item”' ],
    [ 'listitem', '“another list item”' ] ] ]

我正在使用此函数查找(递归)这些数组中的每个字符串:

function findRecur(tree) {
  for (var i = 1; i < tree.length; i++) {
    if (Array.isArray(tree[i]))
      findRecur(tree[i])
    else
      console.log(tree[i])
  }
}

function anotherFunc(tree, callback) {
  findRecur(tree)

  callback(null, tree) 
}

输出:

"a paragraph"
'another paragraph'
test--test
test---test
"a list item"
"another list item"

我想在 anotherFunc 之外做 console.log。所以我这样做了:

function findRecur(tree) {
  for (var i = 1; i < tree.length; i++) {
    if (Array.isArray(tree[i]))
      findRecur(tree[i])
    else
      return tree[i]
  }
}

function anotherFunc(tree, callback) {
  findRecur(tree, function(node) {
     console.log(node)
  })

  callback(null, tree) 
}

但是没有任何输出。我想我必须向 findRecur 添加第二个参数,但不太确定如何以及添加什么。

有什么建议吗?

findRecur 需要将被调用的函数,它应该在 else

中调用它

例如

function findRecur(tree, fn) {
  for (var i = 1; i < tree.length; i++) {
    if (Array.isArray(tree[i]))
      findRecur(tree[i])
    else
      fn(tree[i])
  }
}

是的,您需要向 findRecur 函数添加回调参数。将两个参数传递给只查看第一个参数的函数是没有意义的。

function findRecur(tree, callback) {
    for (var i = 1; i < tree.length; i++) {
        if (Array.isArray(tree[i])) {
            findRecur(tree[i], callback);
        } else {
            callback(tree[i]);
        }
    }
}

然后你可以这样调用你的函数:

findRecur(data, function(text) { console.log(text); });

或者像这样:

findRecur(data, console.log);