我有一个看起来像这样的数据结构
const array = [{
name: 'bar',
children: [{
name: 'foo',
children: [{
name: 'baz123',
}, {
name: 'baz',
}]
}]
}, {
name: 'shallowKey'
}, {
name: 'abc'
}];
我想把它弄平,看起来像这样
[{
name: 'bar'
}, {
name: 'foo',
}, {
name: 'baz123',
}, {
name: 'baz',
}, {
name: 'shallowKey'
}, {
name: 'abc'
}];
我试过这样的lodash https://jsfiddle.net/hmzhjji/081q60qg/1/ 但它没有做任何事情,我可以做任何其他方式吗?
由于
答案 0 :(得分:2)
递归方式是:
function flatten(array, result = []){
for(const {name, children} of array){
result.push({name});
if(children) flatten(children, result);
}
return result;
}
或替代ES6版本:
const flatten = array => array.reduce((res, {name, children = []}) => res.concat(name).concat(flatten(children)), []);
因此,您可以flatten(array)
获得所需的结果。
答案 1 :(得分:0)
您可以使用forEach迭代数组并检查是否存在所需对象并以递归方式调用该函数
const array = [{
name: 'bar',
children: [{
name: 'foo',
children: [{
name: 'baz123',
}, {
name: 'baz',
}]
}]
}, {
name: 'shallowKey'
}, {
name: 'abc'
}];
var res = [];
function flatten(array){
array.forEach(function(obj){
var name = {name: obj.name}
res.push(name);
if(obj.children){
flatten(obj.children)
}
})
return res;
}
console.log(flatten(array))