如何基于javascript中的多个选项过滤嵌套数据?

时间:2019-02-13 17:16:19

标签: javascript

我有JSON数据,其结构如下:

data = [
{
    "id": 100,
    "floorplans": [
        {
            "bhk": 1,
            ...some other fields
        },
        {
            "bhk": 3,
            ...some other fields
        },
        {
            "bhk": 2,
            ...some other fields
        }
    ]
},
{
    "id": 200,
    "floorplans": [
        {
            "bhk": 1.5,
            ...some other fields
        },
        {
            "bhk": 1,
            ...some other fields
        },
        {
            "bhk": 2.5,
            ...some other fields    
        }
    ]
},
{
    "id": 300,
    "floorplans": [
        {
            "bhk": 1,
            ...some other fields
        },
        {
            "bhk": 4,
            ...some other fields
        },
        {
            "bhk": 2,
            ...some other fields
        }
    ]
}]

现在我还有另一个数组,可以说tempArray = [2,3],现在我只想从bhk === 2即tempArray [0]或bhk === 3即tempArray [1 ]

我无法理解如何过滤此类数据?下面的代码不起作用,我找不到任何此类过滤的示例。

代码:

var filtered_data = data.filter((val) => {
        return val.floorplans.indexOf(tempArray[0]) !== -1;
      })

现在,因为tempArray具有2和3个元素,所以我只想显示data [0]和data [2]对象而不显示data [1],因为data [1]既不包含2也不包含3。

1 个答案:

答案 0 :(得分:2)

您可以简单地将Array.filter()Array.some()Array.includes()结合使用,以过滤出临时数组中存在bhk的数据。

尝试以下操作:

let data = [ { "id": 100, "floorplans": [ { "bhk": 1 }, { "bhk": 3 }, { "bhk": 2 } ] }, { "id": 200, "floorplans": [ { "bhk": 1.5 }, { "bhk": 1 }, { "bhk": 2.5 } ] }, { "id": 300, "floorplans": [ { "bhk": 1 }, { "bhk": 4 }, { "bhk": 2 } ] }];

let temp = [2, 3];

let filterData = data.filter(a => a.floorplans.some(e => temp.includes(e.bhk)));

console.log(filterData);