Javascript 在Typescript中的分组对象上迭代
我有一个通过lodash groupBy函数映射分组数据的对象, 迭代集合并检索以下信息的最佳方式是什么: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
- 产品总数
- 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;