递归函数返回空数组

时间:2018-08-14 14:49:42

标签: javascript recursion

此代码旨在将所有子元素及其子元素放入一个数组中。但是,它返回一堆空数组。

function get_independent_elements_from(element) {

    var independent_elements = [];

    if (element.hasChildNodes()) {
        var children = element.children;

        for (let child of children) {
            independent_elements = independent_elements.concat(get_independent_elements_from(child));
        }
    } else {
        independent_elements.push(element);
    }

    return independent_elements;
}

2 个答案:

答案 0 :(得分:0)

虽然您的新代码确实可以使用,但是您也可以让浏览器为您完成繁重的工作,而无需递归:

function getLeafNodes(el) {
    let nl = el.querySelectorAll('*');
    return [].filter.call(nl, x => !x.firstChild);
}

这是一个可能更有效的递归版本,它仅关闭单个数组并在内部处理递归:

function getLeadNodes(el) {
    let r = [];
    (function loop(x) {
        if (x.children.length) {
            [].forEach.call(x.children, loop);
        } else {
            r.push(x);
        }
    })(el);
    return r;
}

答案 1 :(得分:0)

如果元素是这样的:

<p>hello world</p>

element.hasChildNodes()将返回ture,而element.children将返回空的HTMLCollection。

您可以更改if条件进行尝试。

if (element.children.length) { xxx }

谢谢您给我建议或意见。