Javascript 计算子对象中变量在角度方向上的出现次数

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":

我将从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":"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);