【发布时间】:2015-03-28 21:31:00
【问题描述】:
我有这个数组和对象代表相同的数据:
arrayExample = [
{name: "max", age: 21},
{name: "max.David", age: 27},
{name: "max.Sylvia"},
{name: "max.David.Jeff"},
{name: "max.Sylvia.Anna", age: 20},
{name: "max.David.Buffy"},
{name: "max.Sylvia.Craig"},
{name: "max.Sylvia.Robin"}
];
ObjectExample = {
name: "max",
age: 21,
children: [
{
name: "Sylvia",
children: [
{name: "Craig"},
{name: "Robin"},
{name: "Anna", age: 20}
]
},
{
name: "David",
age: 27,
children: [
{name: "Jeff"},
{name: "Buffy"}
]
}
]
};
我的目标是扩展 Array 类以具有 2 个函数 flatten 将 objectExample 转换为 arrayExample 和不均匀的相反,我想也许 lodash 在这里会有所帮助,但我仍然没有找到正确的方法在这里做这就是我现在的位置:
首先从 objectExample 展平到 arrayExample objectExample 结构必须是特定的,这意味着父母必须与所有孩子共享一个属性,确保父母和孩子可以拥有其他应该移植到新 arrayExample 中的正确项目的属性,也适用于不均匀函数它应该创建一个对象,所有的父母都与他们的孩子共享相同的属性,其他属性应该分别复制。
为了给出我的用例,我试图在我的应用程序中创建一个 d3js tree layout 或 angular ui router,这将从路由 JSON 文件生成,因为我在 JSON 文件中创建路由。
更新:
我的具体问题是我需要为 angular-ui-router 配置状态对象创建一个 d3js 树布局,如前所述,我可以将其提取到 json 文件中,ui-router 的结构就像 arrayExample,并且 d3js 树布局所需的结构就像 objectExample,解决此问题的一种方法是手动重写它,它不会花费太多时间,但该解决方案不是我想要的,我需要为此创建一个构建任务通用路由在其配置对象中始终具有 name 属性,可用于查找每个路由或状态的子级,有关更多信息,请查看 ui-router 获取路由配置对象和此 d3 视频以获取 d3 tre 布局:
更正:使用 flatten 函数扩展 Object 类以将对象扁平化为数组,使用 unEven 函数扩展 Array 类以将数组 unEven 扩展为不像我之前写的对象:
我的目标是将 Array 类扩展为具有 2 个功能。
更新 2:
为了更清楚地说明这一点,flatten 和 unEven 都类似于 map 函数,除了 flatten 用于对象而不是数组并返回数组,而 unEven 函数用于数组但返回对象。
【问题讨论】:
-
您遇到了什么具体问题?
-
展平的输出是否必须与
arrayExample中的确切顺序一致?我问是因为这不是递归算法的自然顺序,因此获得特定顺序会做更多的工作。 -
这听起来像XY Problem。
-
@jfriend00 订单不重要。
-
@GregPrisament 检查更新
标签: javascript arrays d3.js lodash