You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular模板中动态筛选数组并分类展示奇偶数字

解决Angular组件中奇数偶数分开展示的问题

嘿,我来帮你搞定这个数字分类展示的需求~首先得修正模板里的一个小问题:你原来的外层*ngFor会循环数组里的每一个数字,生成多组“奇数/偶数”板块,这肯定不是你想要的效果。下面给你两种简单可行的实现方式:

方法一:组件内拆分数据(推荐)

这种方式把数据处理逻辑放在组件类里,模板只负责渲染,代码更清晰,性能也更好。

首先修改你的AppComponent,添加两个getter属性来分别获取奇数和偶数数组:

class AppComponent {
  numbers: number[] = [1, 2, 3, 4, 5];

  // 获取所有奇数
  get oddNumbers(): number[] {
    return this.numbers.filter(num => num % 2 !== 0);
  }

  // 获取所有偶数
  get evenNumbers(): number[] {
    return this.numbers.filter(num => num % 2 === 0);
  }
}

然后更新模板,去掉多余的外层*ngFor,直接分别渲染两个列表:

<div>
  <h1>Odd Numbers</h1>
  <ul>
    <li *ngFor="let num of oddNumbers">{{ num }}</li>
  </ul>
</div>
<div>
  <h1>Even Numbers</h1>
  <ul>
    <li *ngFor="let num of evenNumbers">{{ num }}</li>
  </ul>
</div>

方法二:模板内直接过滤(不推荐用于大数据量)

如果你不想修改组件类,也可以在模板里直接用filter方法,但要注意:Angular的变更检测会每次都执行这个过滤操作,数据量大的时候可能影响性能。

模板代码如下:

<div>
  <h1>Odd Numbers</h1>
  <ul>
    <li *ngFor="let num of numbers.filter(n => n % 2 !== 0)">{{ num }}</li>
  </ul>
</div>
<div>
  <h1>Even Numbers</h1>
  <ul>
    <li *ngFor="let num of numbers.filter(n => n % 2 === 0)">{{ num }}</li>
  </ul>
</div>

两种方式都能实现你要的效果,个人更推荐第一种,因为逻辑和视图分离,也更高效~

内容的提问来源于stack exchange,提问作者Eyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:50:52