Javascript 在Typescript中的分组对象上迭代

Javascript 在Typescript中的分组对象上迭代,javascript,typescript,ecmascript-6,lodash,Javascript,Typescript,Ecmascript 6,Lodash,我有一个通过lodash groupBy函数映射分组数据的对象, 迭代集合并检索以下信息的最佳方式是什么: 产品总数 totalProductSum=总和(ProductsUnmberingGroup* (价格) productsNumberPerGroup 因此,输出可能是 let result = { totalProductNumber: 8, totalProductSum: 17, productsNumberPerGroup: [{1:2}, {2:3}, {3:3}] // o

我有一个通过lodash groupBy函数映射分组数据的对象, 迭代集合并检索以下信息的最佳方式是什么:

  • 产品总数
  • totalProductSum=总和(ProductsUnmberingGroup* (价格)
  • productsNumberPerGroup
因此,输出可能是

let result = {
totalProductNumber: 8,
totalProductSum: 17,
productsNumberPerGroup: [{1:2}, {2:3}, {3:3}] // or sth. like this
}
我的假设是使用Object.entries或Object.values

  let totalSum: number;
  let totalPrices: number[];
Object.values(products)
      .map((prod) => {
        (prod as IProduct[]).map((p) => {
            this.totalPrices.push(Number(p.price)); // here getting Cannot read property 'push' of undefined
        });
      });


你应该做两个改变

let totalPrices: number[];

界面上还有一个变化

interface IProduct {
  name: string;
  color: string;
  price: string;
  id: number
}
改变

price: string;

风格多变
接口IPProduct{
名称:string
颜色:字符串
价格:号码
身份证号码
}
类型产品=记录
const products:products={…}
设totalProductNumber=0
设totalProductSum=0
让productsNumberPerGroup:[字符串,数字][]=[]
Object.entries(products.map)([grpId,grpProducts])=>{
totalProductNumber=totalProductNumber+grpProducts.length
totalProductSum=totalProductSum+grpProducts.reduce((acc,curr)=>acc+curr.price,0)
productsNumberPerGroup=[…productsNumberPerGroup,[grpId,grpProducts.length]]
})
console.log(totalProductNumber)//8
console.log(totalProductSum)//17
console.log(productsNumberPerGroup)/[['1',2',2',3','3',3]]
一成不变

类型结果=[
totalProductNumber:number,
totalProductSum:number,
productsNumberPerGroup:[字符串,数字][]
]
常量初始值:结果=[0,0,[]
const[totalNum,totalSum,prdPerGrp]=Object.entries(products).reduce(
([num,sum,perGrp],[grpId,grpProducts])=>{
返回[
num+grpProducts.length,
总和+GRP产品减少((acc,curr)=>acc+curr.price,0),
[…每GRP,[grpId,grpProducts.length]]
]
},
最初的
)
console.log(totalNum)//8
console.log(totalSum)//17
console.log(prdPerGrp)/['1',2','2',3','3',3]]

您只声明了totalPrices,没有给它赋值。尝试为其分配一个空数组。
interface IProduct {
  name: string;
  color: string;
  price: string;
  id: number
}
price: string;
price: number;