过滤Javascript / Lodash中的嵌套属性

失落9123193

我目前有看起来像这样的数据:

[{
    "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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章