我将从 API 返回的数据分配给名为 todayData
的变量。有一个名为 meals
的子对象,其中有一个属性 name
。
我想要实现的是计算 meals
对象的 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;
因为有些属性是Array类型的,所以要设置index。
编辑 1:
具有多个订单和多餐的数据解决方案。 (感谢 Bill Cheng 让我考虑一般方法。)
let mealOccureneceCount = {};
let occurences = this.todayData.forEach(user => {
user.orders.forEach(order => {
order.meals.forEach(meal => {
mealOccureneceCount[meal.name] = (mealOccureneceCount[meal.name] || 0) + 1;
});
});
});
console.log(mealOccureneceCount);
关于javascript - 以 Angular 计算子对象中变量的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57041358/