使用JS将嵌套对象的键展平为数组

时间:2014-05-28 19:06:15

标签: javascript recursion tree nested

我有一个对象,我想将“树”的每个“分支”作为一个数组。 (请随意更正我的术语!)我所拥有的内容如下:

var features = {
  "f": {
    "t": "100",
    "f": {
      "i": ['150'],
      "b": ['300'],
      "f": {
        "k": 100
      }
    },
    "l": ['255']
  },
  "c": {
    "s": {
      "t": ["100"]
    },
    "t": "100"
  }
};

我想将它解析为以下结果,所以我可以再次迭代它并将其传递给另一个函数。

var result = [
  "ffi",
  "fffk",
  "fl",
  "ct"
]

到目前为止我所拥有的is on JS Bin here。任何帮助或指示正确的方向将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试我的un-flatten-tree npm模块将树转换为分支列表。另请注意,lodash中的“map”用于对象遍历。

function walk(tree) {
    return _.map(tree, function (v, k) {
        return {
            name: k,
            items: (typeof v !== 'object' || v instanceof Array) ? [] : walk(v)
        };
    });
}

function getChildNodes(node) {
    return node.items.map(function (item) {
        return {
            name: node.name + item.name,
            items: item.items
        };
    });
}

var result = uft.flatten(walk(features), getChildNodes)
    .filter(function (node) { return node.items.length === 0; })
    .map(function (node) { return node.name; });

直播示例:

https://jsfiddle.net/iyegoroff/ut3bz6oc/