JS - Lodash;嵌套对象(父/子)到平面数组
JS - Lodash; Nested Objects (parents/children) to flat array
我正在使用lodash(尽管解决方案不需要),我想转换以下结构:
{ prop1: 'root',
prop2: 'someVal',
children: [
{ prop1: 'first Child',
prop2: 'some other val',
children: [
{ prop1: 'last child'
prop2: 'another value'
children: []
}
]
}
]
}
转换为平面数组:
[ { prop1: 'root', prop2: 'someVal' },
{prop1: 'firstChild', prop2: 'some Other Val'},
{prop1: 'last child', prop2: 'another value'}
]
深度可以改变,最后一个子节点总是将[]
赋给它的children
属性;注意,在这种特殊情况下,children数组中总是只有一个元素
应该是相当直接的,但似乎我就是不能把手指放在它的一些原因
谢谢
解决了这个代码段(在CoffeeScript中)
flatten = (node) ->
row = node
_.each node.children or [], (el) ->
flatten el
ancestors.push row
这是用于使用匿名目标扁平化为(例如flattened
)
flatten = (collection, flattened = [])->
_.each collection, (obj)->
flattened.push obj
flatten obj.children, flattened
flattened
使用纯JS解决方案http://jsbin.com/bazilurolu/edit?js,控制台
var flatArray = function(input){
var result = [];
(function(obj){
var arr = [], newObj = {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if(key !== "children"){
newObj[key] = obj[key];
}
else{
arr = obj[key];
}
}
}
result.push(newObj);
if(arr.length){
arguments.callee(arr[0]);
}
})(input);
return result;
};
下面是@jusopi解决方案的Typescript版本
const flatten = (collection: any[], flattened?: any[]) => {
if (!flattened) {
flattened = [];
}
_.each(collection, (obj) => {
flattened!.push(obj);
flatten(obj.children, flattened);
});
return flattened;
};
相关文章:
- array_push平面数组问题-需要能够向数组中添加多个变量
- 用Javascript从两个平面结构数组中格式化JSON
- 如何从平面JavaScript数组创建分层HTML结构
- 强制json_encode在平面数组中创建数值字符串
- Undercore:对象到平面对象的数组.什么'这就是魔法
- 将JS对象隐藏到具有父名称的平面数组中
- 在javascript中从平面数组构建树数组
- 将嵌套的整数数组转换为平面整数数组-javascript
- 如何将平面JavaScript对象数组转换为嵌套的分层JSON结构
- JavaScript从给定宽度和高度的平面数组中确定行、列和元素的相对位置
- 如何从平面数组创建JavaScript多维数组
- 将平面的对象数组转换为嵌套的对象数组
- 将对象重构为平面数组
- JS - Lodash;嵌套对象(父/子)到平面数组
- 从平面数组创建树对象
- Js平面数组到多级数组
- 在JavaScript中从平面数组生成树结构(不使用对象引用)
- Javascript平面列表到数组的串联
- 如何将平面javascript数组转换为嵌套的图结构
- D3.js:通过 d3 加载平面一维数组.csv导致“类型错误:组数据未定义”/使用 D3.js 加载多个 CSV 文件