angular - 如何在 Angular 中显示分组数组?

标签 angular typescript

我有一个像这样的对象数组

[
  {"desc":"a", "menu": 1},{"desc":"b", "menu": 2},{"desc":"c", "menu": 1}, 
  {"desc":"d", "menu": 3},{"desc":"e", "menu": 3},{"desc":"f", "menu": 2}, 
  {"desc":"g", "menu": 1},{"desc":"g", "menu": 1},{"desc":"g", "menu": 4}, 
  {"desc":"g", "menu": 4},{"desc":"g", "menu": 4}
]
从 API 获取。
现在我将显示带有 *ngFor 的对象通过将它们设置为按“菜单”分组并像这样向其添加标签
菜单 1
{菜单 1 的所有对象}
菜单 2
{菜单 2 的所有对象}
菜单 3
{菜单 3 的所有对象}
我会在 *ngFor 中做这样的事情
*ngFor="let object of objects; let menu = 0"
     if menu !== object.menu
           menu === object.menu
       WRITE LABEL
但是我怎么能在一个真实的案例代码中实现它呢?

最佳答案

我认为我们应该在使用之前对其进行分组 *ngFor这是解决方案

 function groupBy(array, fn) {
    return array.reduce(
      (acc, current) => {
        const groupName = typeof fn === 'string' ? current[fn] : fn(current);
        (acc[groupName] = acc[groupName] || []).push(current);
        return acc;
      },
      {}
    );
  }

 function toArray(obj) {
    return Object.keys(obj).map(k => obj[k]);
  }
  
  const data = [
  {"desc":"a", "menu": 1},{"desc":"b", "menu": 2},{"desc":"c", "menu": 1}, 
  {"desc":"d", "menu": 3},{"desc":"e", "menu": 3},{"desc":"f", "menu": 2}, 
  {"desc":"g", "menu": 1},{"desc":"g", "menu": 1},{"desc":"g", "menu": 4}, 
  {"desc":"g", "menu": 4},{"desc":"g", "menu": 4}
]

const groupMenu = groupBy(data, (item) => item.menu);
然后在模板中
<group *ngFor="let group of groupMenu">
  <menu *ngFor="let menu of group">
   <label>{{menu.desc}}</label>
  </menu>
</group>

关于angular - 如何在 Angular 中显示分组数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64569084/

相关文章:

angular - 如何防止按钮点击事件

typescript - response.body.getReader 不是函数

Angular 8 - 路由没有发生 - 垫表行

java - 如何使用 Selenium 处理 Angular 中的 WebTables?

javascript - 为什么 Angular 2 或 Angular 4 使用香蕉括号?有什么具体原因吗?为什么他们不遵循与 Angular 1 相同的模式?

angular - 如何验证空格/空格? [ Angular 2]

javascript - 如何在本地 javascript 函数中使用 .d.ts

javascript - 如何检查任何一个变量是否大于0

TypeScript - 将类型附加到元组类型的末尾

Angular Material 表可扩展表行不扩展?