提问者:小点点

如何在JavaScript中过滤并按id嵌套数据分组?


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

const SubSpecs= [
        {
            "_id": "1",
            "nom": "installation",
            "blocks": [
                {
                    "idBlock": "1",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 12
                        }
                    ]
                },
                {
                    "idBlock": "2",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 14
                        }
                    ]
                }
            ]
        },
        {
            "_id": "2",
            "nom": "tech",
            "blocks": [
                {
                    "idBlock": "1",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 12
                        }
                    ]
                },
                {
                    "idBlock": "2",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 14
                        },
                        {
                            "idArtisan": "2",
                            "price": 50
                        }
                    ]
                }
            ]
        }
        
    ],
   
}

这是我想通过ID筛选的工匠数组:

 artisans= [
        {
            "_id": "1",
            "username": "test1"
        },
        {
            "_id": "2",
            "username": "test2"
        }
    ]

现在我想提取所有的价格,有相同的id的工匠(提取的id),并按此id分组!!

我只是开始了一个简单的功能,但我没有找到完成它的方法!! 有人能帮忙吗?!

我不明白如何过滤这些数据? 下面的代码不工作,我不能够找到任何这样的过滤的例子。

这就是我的功能:

const total = data
        .map((fb) =>
          fb.blocks
            .map((b) =>
              b.ArtisanOffres.map((ao)=> ao.price)
                .join(",")
                .includes("1")
            )
            .join(",")
        )
        .join(",")
        .split(",");

我是javascript新手,我面临这个算法问题,


共1个答案

匿名用户

你好,你觉得这个解决方案怎么样? 我通过idArtisan===“1”过滤了您的数据,然后将所有价格相加。 结果是52。 这里的工作示例:

null

const SubSpecs= [
        {
            "_id": "1",
            "nom": "installation",
            "blocks": [
                {
                    "idBlock": "1",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 12
                        }
                    ]
                },
                {
                    "idBlock": "2",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 14
                        }
                    ]
                }
            ]
        },
        {
            "_id": "2",
            "nom": "tech",
            "blocks": [
                {
                    "idBlock": "1",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 12
                        }
                    ]
                },
                {
                    "idBlock": "2",
                    "ArtisanOffres": [
                        {
                            "idArtisan": "1",
                            "price": 14
                        },
                        {
                            "idArtisan": "2",
                            "price": 50
                        }
                    ]
                }
            ]
        }
        
    ];
    let result = SubSpecs.map(sub => {
        return sub.blocks.map(block => {
         return block.ArtisanOffres.filter(artisan => artisan.idArtisan === "1");
       });
    });
    let array = result.flat(2);
    console.log(array.reduce(function(_this, val) {
          return _this + val.price
      }, 0));