我目前有看起来像这样的数据:
[{
"id": 1,
"name": "Canada",
"checked": true,
"vacationSpots": [{
"id": 1,
"name": "Toronto",
"checked":false,
"activities": [{
"id": 1,
"checked": false,
"name": "Niagara Falls"
}]
}, {
"id": 2,
"name": "France",
"checked":true,
"activities": [{
"id": 2,
"checked":true,
"name": "Eiffel tower"
}]
}]
}, {
"id": 2,
"name": "US",
"checked": true,
"vacationSpots": [{
"id": 3,
"name": "California",
"checked": true,
"activities": [{
"id": 3,
"name": "Surfing",
"checked":false
}]
}]
}]
我正在从已设置为true的活动中收集活动ID。
所以结果看起来像这样:
2
虽然我可以做到这一点,但我必须经过3个级别才能访问活动
for (i = 0; i < country.length; i++){
country = allAreas[i];
....
for (j = 0; j < country.vacationSpots.length; j++){
....
for (k = 0; k < vacationSpots.activities.length; k++){
(先搜索国家/地区,然后搜索VacationSpots,然后再搜索活动。是否有一种方法可以过滤掉它而不遍历每个级别?有没有办法用Lodash做到这一点?
为了在整个数据集中为检查的活动提供一组唯一的活动ID ,假设任何特定活动都可能出现在一个以上的国家/度假胜地中,则这样的内容就足够了
let data = [{"id":1,"name":"Canada","checked":true,"vacationSpots":[{"id":1,"name":"Toronto","checked":false,"activities":[{"id":1,"checked":false,"name":"Niagara Falls"}]},{"id":2,"name":"France","checked":true,"activities":[{"id":2,"checked":true,"name":"Eiffel tower"}]}]},{"id":2,"name":"US","checked":true,"vacationSpots":[{"id":3,"name":"California","checked":true,"activities":[{"id":3,"name":"Surfing","checked":false}]}]}];
let activityMap = data.reduce((map, country) => {
country.vacationSpots.forEach(vs => {
vs.activities.forEach(activity => {
if (activity.checked) {
map[activity.id] = true;
}
});
});
return map;
}, Object.create(null));
let activities = Object.keys(activityMap).map(Number);
console.log(activities);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句