首页 > 解决方案 > 如何根据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。

标签: javascript

解决方案


您可以简单地使用Array.filter()withArray.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);


推荐阅读