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

如何在ng-repeat下拉框中实现产品分类数组的拆分与去重?

我来帮你搞定这个问题!要实现把产品分类数组拆平、去重后在下拉框显示,咱们可以通过AngularJS的自定义过滤器来完成,这是最简洁的方案了👇

实现步骤:自定义分类去重过滤器

1. 创建自定义过滤器

在你的AngularJS应用里,定义一个专门处理分类扁平化和去重的过滤器:

// 假设你的app模块叫myApp
angular.module('myApp', [])
.filter('uniqueFlattenedCategories', function() {
  return function(products) {
    // 第一步:把所有产品的分类数组合并成一个一维数组(扁平化)
    const flattened = [];
    angular.forEach(products, product => {
      // 先判断分类是否存在且是数组,避免报错
      if (product.categories && Array.isArray(product.categories)) {
        flattened.push(...product.categories);
      }
    });
    
    // 第二步:对扁平化后的数组去重
    return flattened.filter((category, idx, arr) => arr.indexOf(category) === idx);
  };
});

2. 在下拉框中使用过滤器

然后在HTML的<select>里,直接用这个过滤器配合ng-repeat:

<select ng-model="selectedCategory">
  <option ng-repeat="category in products | uniqueFlattenedCategories" 
          value="{{category}}">
    {{category}}
  </option>
</select>

3. 可选:添加排序

如果希望分类按顺序显示,可以再加个orderBy过滤器:

<option ng-repeat="category in products | uniqueFlattenedCategories | orderBy:'toString()'" 
        value="{{category}}">
  {{category}}
</option>

原理说明

  • 扁平化:遍历每个产品,把它的分类数组逐个合并到总列表里,把嵌套的数组变成一维列表。
  • 去重:利用数组的filter方法,只保留第一次出现的分类项(通过判断当前项的索引是否等于它在数组中第一次出现的索引)。
  • 容错处理:加入了对product.categories的存在性和类型判断,避免因为数据格式问题导致页面报错。

这样就能完美实现你想要的效果:从JSON获取产品分类,拆分数组、去重后动态生成下拉选项啦!

内容的提问来源于stack exchange,提问作者André Nakazato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:28:24