Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用数组中对象的键对typescript数组进行分组?_Javascript_Arrays_Angular_Typescript - Fatal编程技术网

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());
}
}