我正在使用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属性;请注意,在这种情况下,子数组中总是有一个项。
应该相当直截了当,但似乎我只是因为某些原因而不能把手指放在上面
谢谢
发布于 2014-06-03 13:58:58
用这个片段解决(在CoffeeScript中)
flatten = (node) ->
row = node
_.each node.children or [], (el) ->
flatten el
ancestors.push row发布于 2017-08-11 13:59:23
这是用于使用匿名目标来压缩成(例如,flattened)
flatten = (collection, flattened = [])->
_.each collection, (obj)->
flattened.push obj
flatten obj.children, flattened
flattened发布于 2015-11-12 20:42:36
使用纯JS:- http://jsbin.com/bazilurolu/edit?js,console的解决方案
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;
};https://stackoverflow.com/questions/23999471
复制相似问题