从javascript树对象创建列表数组?

时间:2017-02-11 03:34:48

标签: javascript arrays object

我有javascript树对象,我想将其转换为列表数组

我的树:

[https://jsfiddle.net/wahmal/f2pcmptt/][1]

如何获取'href'值并将其推送到数组列表?

var res=['hrefValue','hrefValue','hrefValue','hrefValue','hrefValue','hrefValue'];

3 个答案:

答案 0 :(得分:1)

var getHrefs = function(nodes) {
    return nodes.reduce(function (arr, node) {
        return arr.concat(node.href).concat(node.nodes ? getHrefs(node.nodes) : []);
    }, []);
}

var hrefs = getHrefs(tree);   // ["7400.34.03.00.00.00", "7400.34.03.01.00.00", ... etc.]

答案 1 :(得分:1)

function convert(tree){
    return tree.reduce(function(acc, o) {       // check the docs for reducs in the link bellow
        if(o.href)                              // if this object has an href
            acc.push(o.href);                   // add the href to the result array
        if(o.nodes)                             // if this object has children
            acc = acc.concat(convert(o.nodes)); // get their href and add (concat) them to the result
        return acc;
    }, []);
}
  • tree应该是一个数组而不是字符串,如果你把它作为一个字符串(JSON字符串),那么你必须在使用JSON.parse将它传递给函数之前解析它。 / p>

  • Javascript没有ArrayLists,只有数组。

  • 以下是Array.prototype.reduce文档的链接。

  • 这是一个有效的fiddle

答案 2 :(得分:1)

您可以使用Array.prototype.map(),展开元素

let res = [];
tree.map(({href, nodes}) => res = [...res, href, ...nodes.map(({href:h}) => h)]);
// do stuff with `res`

jsfiddle https://jsfiddle.net/4ajr1spr/