Javascript LoDash-深度展平对象数组
我有以下收藏。每个对象可能有一个Javascript LoDash-深度展平对象数组,javascript,collections,lodash,flatten,Javascript,Collections,Lodash,Flatten,我有以下收藏。每个对象可能有一个子对象对象数组,该数组可能有一个子对象对象数组,依此类推 [ { "name": "John", "age": 24, "children": [ { "name": "Jack", "age": 53, "children": [ { "name": "Jenny", "age": 88
子对象
对象数组,该数组可能有一个子对象
对象数组,依此类推
[
{
"name": "John",
"age": 24,
"children": [
{
"name": "Jack",
"age": 53,
"children": [
{
"name": "Jenny",
"age": 88
}
]
}
]
},
{
"name": "George",
"age": 45,
"children": [
{
"name": "Chris",
"age": 38,
"children": [
{
"name": "Nick",
"age": 35,
"children": [
{
"name": "Maria",
"age": 63
}
]
}
]
}
]
}
]
我希望递归展平集合,以获得以下结果:
[
{
"name": "John",
"age": 24
},
{
"name": "Jack",
"age": 53
},
{
"name": "Jenny",
"age": 88
},
{
"name": "George",
"age": 45
},
{
"name": "Chris",
"age": 38
},
{
"name": "Nick",
"age": 35
},
{
"name": "Maria",
"age": 63
}
]
如何在
lodash.js中执行此操作?
您可以使用递归函数对每个子元素调用自身并将其连接到同一数组中:
function listPeople(list) {
var people = [];
for (var person in list) {
people.push({name: person.name, age: person.age});
if (person.children) {
var children = listPeople(person.children);
people = people.concat(children);
}
}
return people;
}
然后给它你的第一个数组,第二个数组应该被返回。试试:
var data=[{“name”:“John”,“age”:24,“children”:[{“name”:“Jack”,“age”:53,“children”:[{“name”:“Jenny”,“age”:88}]}}}}},{“name”:“George”,“age”:45,“children”:[{“name”:“Chris”,“age”:38,“children”:[{“name”:“Nick”,“age”:35,“children”:[{“name”:“name”:“Maria”,“age”:63}]}}]}]
功能getPeople(人){
var结果=[];
_.每个(人、职能(人){
push({name:person.name,age:person.age});
person.children&(result=\ union(result,getPeople(person.children)))
});
返回结果
}
document.write(JSON.stringify(getPeople(data)))
您可以尝试:
var _ = require('lodash');
var a = [
{
"name": "John",
"age": 24,
"children": [
{
"name": "Jack",
"age": 53,
"children": [
{
"name": "Jenny",
"age": 88
}
]
}
]
},
{
"name": "George",
"age": 45,
"children": [
{
"name": "Chris",
"age": 38,
"children": [
{
"name": "Nick",
"age": 35,
"children": [
{
"name": "Maria",
"age": 63
}
]
}
]
}
]
}
];
var list = [];
function filter(arr, items){
if(_.isArray(arr) && _.isArray(items)){
_.forEach(items, function(item){
if(item.name && item.age) {
arr.push({
name: item.name,
age: item.age
});
}
if(item.children && _.isArray(item.children)){
filter(arr,item.children);
}
});
}
}
filter(list, a);
console.log(list);
我知道这个功能。我知道如何在文档中按CTRL+F组合键。仅仅提供一个链接并不是一个答案。我的问题是如何让它在我的情况下工作。对不起,我没有仔细阅读你的问题,我再次更新我的答案。