我需要按“产品”字段对对象进行分组,并按“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"
}
]
}
]
};
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>