[英]LoDash - DeepFlatten array of objects
我有以下收藏。 每個對象可能有一個children
對象數組,可能有一個children
對象數組,依此類推......
[
{
"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?
這樣做lodash.js?
嘗試:
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":"Maria","age":63}]}]}]}] function getPeople(persons){ var result = []; _.each(persons, function(person){ result.push({name: person.name, age: person.age}); person.children && (result = _.union(result,getPeople(person.children))) }); return result } document.write(JSON.stringify(getPeople(data)))
<script src="https://lodash.com/_js/lodash.js"></script>
您可以使用遞歸函數來調用每個子元素並將其連接在同一個數組中:
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 _ = 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.