对js对象进行分组

问题描述 投票:0回答:1
我刚刚学习,无法对对象进行分组

我需要按“产品”字段对对象进行分组,并按“keyResults”和“指标”字段中的“产品”字段进行过滤

我知道这是使用reduce函数完成的,但我不能,我也尝试过使用Lodash sortby函数,但这不是我需要的

请帮忙:(

const a = { products: { keyResults: [ { leader: "Aaron", product: "Product 1" }, { leader: "Addie", product: "Product 1" }, { leader: "Mindy", product: "Product 1" }, { leader: "Wiley", product: "Product 2" }, ], metrics: [ { leader: "Aaron", product: "Product 1" }, { leader: "Wiley", product: "Product 2" } ] } };
这就是我所期望的

const b = { products: [ { product: "Product 1", keyResults: [ { leader: "Aaron", product: "Product 1" }, { leader: "Addie", product: "Product 1" }, { leader: "Mindy", product: "Product 1" } ], metrics: [ { leader: "Aaron", product: "Product 1" }, ] }, { product: "Product 2", keyResults: [ { leader: "Wiley", product: "Product 2" }, ], metrics: [ { leader: "Wiley", product: "Product 2" } ] } ] };
    
javascript lodash
1个回答
0
投票
将产品收集到一个对象中,并将属性作为产品名称,并使用

Object.values()

 将产品作为数组获取:

const products = {}; for(const key in a.products){ for(const product of a.products[key]){ ((products[product.product] ??= {product: product.product})[key] ??= []).push(product); } } const b = {products: Object.values(products)}; console.log(b);
<script>
const a = {
  products: {
    keyResults: [
      {
        leader: "Aaron",
        product: "Product 1"
      },
      {
        leader: "Addie",
        product: "Product 1"
      },
      {
        leader: "Mindy",
        product: "Product 1"
      },
      {
        leader: "Wiley",
        product: "Product 2"
      },
    ],
    metrics: [
      {
        leader: "Aaron",
        product: "Product 1"
      },
      {
        leader: "Wiley",
        product: "Product 2"
      }
    ]
  }
};
</script>

© www.soinside.com 2019 - 2024. All rights reserved.