Javascript/Lodash中嵌套属性的过滤
Filtering for Nested Property in Javascript/Lodash
我目前的数据看起来像这样:
[{
"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++){
(搜索国家,然后是度假地点,然后是活动。有没有办法在不遍历每个关卡的情况下过滤这些内容?对洛达什有什么办法吗?
为了在整个数据集中为检查过的活动提供唯一的活动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);
相关文章:
- 如何在Leaflet.js中按属性过滤TopoJSON功能
- Knockoutjs 模板:在通过某些属性过滤该数组后,如何将 1 个对象数组用于 2 个 DOM 元素
- 按对象属性过滤对象的角度
- Angularjs ng-repeat按一个属性过滤,属性重复问题
- ng重复 按深层属性过滤
- 培根.js如何基于另一个属性过滤事件流
- jQuery - 使用类属性过滤
- 按对象的属性过滤对象的 JavaScript 数组并删除重复项
- Knockout-通过多个对象属性过滤可观测阵列中的对象
- 在Angularjs应用程序中,使用嵌套对象属性过滤ng repeat不起作用
- 如何通过按钮数据属性过滤JSON文件
- 通过数组中对象内的对象属性过滤对象数组
- 基于JavaScript中嵌套的属性过滤出数组
- js查询模型通过集合属性过滤
- 如何在node.js中使用属性过滤Json数据?
- 根据data-*属性过滤选择选项
- 在Angularjs中通过对象属性过滤
- Ng-repeat -通过对象's常量属性过滤出不同的值
- 用外部的ng-repeat's object属性过滤嵌套的ng-repeat
- 如何在JavaScript中高效地合并两个对象数组,并按属性过滤重复项