Javascript 计算子对象中变量在角度方向上的出现次数
我将从API返回的数据分配给名为Javascript 计算子对象中变量在角度方向上的出现次数,javascript,angular,typescript,Javascript,Angular,Typescript,我将从API返回的数据分配给名为todayData的变量。有一个名为fines的子对象,其中有一个属性name 我想要实现的是计算fines对象的name属性中出现的次数。 例如,膳食Rice可以在数据中多次出现 数据 [{"id":5,"referenceId":1189,"firstName":"Dan","lastName":"Daniels","orders":[{"id":109,"meals":[{"id":47,"name":"Fried Rice","description":
todayData
的变量。有一个名为fines
的子对象,其中有一个属性name
我想要实现的是计算fines
对象的name
属性中出现的次数。
例如,膳食Rice
可以在数据中多次出现
数据
[{"id":5,"referenceId":1189,"firstName":"Dan","lastName":"Daniels","orders":[{"id":109,"meals":[{"id":47,"name":"Fried Rice","description":"This is a very sweet meal","image":"","mealType":"LUNCH","unitPrice":-20,"status":"ENABLED"}],"serveDate":"2019-07-11 00:00:00"}]}]
JS
let occurences = this.todayData.reduce(function (r, row) {
r[row.orders.meals.name] = ++r[row.orders.meals.name] || 1;
return r;
}, {});
let result = Object.keys(occurences).map(function (key) {
return { meals: key, count: occurences[key] };
});
console.log(result);
解决方案:
r[row.orders[0].meals[0].name] = ++r[row.orders[0].meals[0].name] || 1;
由于某些属性是数组类型,因此应设置索引
编辑1:
r[row.orders[0].meals[0].name] = ++r[row.orders[0].meals[0].name] || 1;
针对多份订单和多顿饭的数据解决方案。(感谢Bill Cheng让我考虑一般的方法)
在代码中使用嵌套的reduce()方法有什么好处吗?数据结构是一个三维数组。。。除非您只对膳食感兴趣,否则您可以去掉前2个“reduces”,将其替换为
this.todayData.orders[0].fines.reduce(……。
您的代码很明显,因为可以使用多个订单和膳食数据。谢谢。有什么问题吗?
const occurences = this.todayData.reduce((r1, c1) => c1.orders.reduce((r2,c2) => c2.meals.reduce((r3,c3) => { r3[c3.name]= (r3[c3.name] || 0) + 1; return r3;}, r2), r1),{});
const result = Object.entries(occurences).map(([key, value]) => ({ meals: key, count: value }));
console.log(result);