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

标签 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 。任何正确方向的帮助或指示将不胜感激!谢谢!

最佳答案

你可以试试我的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/

关于javascript - 使用 JS 将嵌套对象的键展平为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919887/

相关文章:

javascript - 为什么此代码不适用于单独的 javascript?

javascript - 错误,在我的类中总是返回未定义的值

java - grails 服务中的深度递归失败

c# - 奇怪的 C# 泛型约束

java - 从语义上理解递归反向字符串返回语句

php - 将数据库结果转化为数组

recursion - 从路径字符串中获取树状结构

javascript - 当对象在视口(viewport)中可见时执行操作

javascript - 是否可以使用 Service Worker 代理 iframe 子资源?

c - Tic-Tac-Toe:如何填充决策树?