javascript - 以 Angular 计算子对象中变量的出现次数

标签 javascript angular typescript

我将从 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/

相关文章:

angular - Typescript 中的 "Computed"属性

javascript - 使用 plupload 和 aspx 页面表单提交

javascript - `let` 和 for 循环 block 作用域的说明

Angular 4 - 找不到名称 'HttpClient'

angular - Angular 2 应用程序中没有 'Access-Control-Allow-Origin' header

angular - 使用 Angular 管道插入 DOM 克隆

typescript - 在文件中创建计算类型的导出

javascript - angular 2输出后如何监听事件?

javascript - DropZone 替换 init 中的图像

javascript - 如何将 "k%C3%B6nnen"转换为 können"