这是输入:
[ '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"
我想改为console.log
以外anotherFunc
。所以我这样做了:
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
添加第二个参数,但不太确定如何以及如何。
任何建议?
答案 0 :(得分:2)
是的,您需要在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);
答案 1 :(得分:0)
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])
}
}