Javascript 如何使用数组中对象的键对typescript数组进行分组?
我有一个数组Javascript 如何使用数组中对象的键对typescript数组进行分组?,javascript,arrays,angular,typescript,Javascript,Arrays,Angular,Typescript,我有一个数组products,需要按Product.\u shop\u id进行分组 出口类产品{ _id:字符串; _店铺编号:string; } 导出类变量{Variant\u id:string;} 导出接口购物车{ 变体:变体; 产品:产品; 数量:数量; 总价:个数; } 导出类CartComponent实现OnInit{ 产品:ShoppingCart[]=[]; 恩戈尼尼特(){ 此项。产品=[ {Variant:{Variant_-id:'1'},产品:{Variant_-id
products
,需要按Product.\u shop\u id
进行分组
出口类产品{
_id:字符串;
_店铺编号:string;
}
导出类变量{Variant\u id:string;}
导出接口购物车{
变体:变体;
产品:产品;
数量:数量;
总价:个数;
}
导出类CartComponent实现OnInit{
产品:ShoppingCart[]=[];
恩戈尼尼特(){
此项。产品=[
{Variant:{Variant_-id:'1'},产品:{Variant_-id:'1',商店_-id:'1'},数量:5,总价:600},
{Variant:{Variant_id:'2'},产品:{Variant_id:'2',商店_id:'2'},数量:4,总价:500},
{变量:{变量id:'5'},产品:{id:'3',商店id:'2'},数量:3,总价:400}
]
}
someMethod(){
const productsByShop=this.utils.groupBy(this.products,key);
}
}
由于您的\u shop\u id
属于嵌套对象,您最好传递lambda来提取它:
someMethod(){
const productsByShop = this.utils.groupBy(this.products,
(product) => product.Product._shop_id);
}
// ...
export class Utils {
constructor() { }
groupBy<T, K>(list: T[], getKey: (item: T) => K) {
const map = new Map<K, T[]>();
list.forEach((item) => {
const key = getKey(item);
const collection = map.get(key);
if (!collection) {
map.set(key, [item]);
} else {
collection.push(item);
}
});
return Array.from(map.values());
}
}
someMethod(){
const productsByShop=this.utils.groupBy(this.products,
(product)=>product.product.\u shop\u id);
}
// ...
导出类UTIL{
构造函数(){}
groupBy(列表:T[],getKey:(项:T)=>K){
常量映射=新映射();
list.forEach((项目)=>{
const key=getKey(项目);
const collection=map.get(键);
如果(!集合){
映射集(键,[项]);
}否则{
收集、推送(项目);
}
});
返回数组.from(map.values());
}
}