如何使用多个条件过滤数据

时间:2016-08-30 09:34:34

标签: javascript angularjs

我的列表中有一些报警数据,我希望根据某些条件对其进行过滤,例如,如果在同一位置有多个类型为pull_Alarm和emergency_alarm的报警,则优先考虑紧急报警。

Here is my list:
[
    {
        alarmType:"Normal_ALARM"
        location:"Ward5"
        severity:"URGENT"
    },
    {
        alarmType:"Emergency_Alarm
        location:"Ward1"
        severity:"URGENT"
    },
    {
        alarmType:"PULL_Alarm"
        location:"Ward1"
        severity:"NORMAL"
    }
]

我希望过滤后的列表应该只是

[
  {
    alarmType:"Normal_ALARM"
    location:"Ward5"
    severity:"URGENT"
  },
  {
    alarmType:"Emergency_Alarm
    location:"Ward1"
    severity:"URGENT"
  }
]

有人可以建议我如何在这些情况下应用过滤器。

4 个答案:

答案 0 :(得分:0)

使用switch case创建一个过滤器或添加if else条件。

.filter("alarmFilter", function () {
    // write condition what ever you want to add
});

并将此过滤器应用于您要应用条件的表达式。

答案 1 :(得分:0)

写过滤器

$scope.filter1 = function(item)
    {
        return (item.severity == 'URGENT');
    };

然后使用它

<div ng-repeat="item in object| filter:filter1">{{item.alarmType}}</div>

JSFIDDLE http://jsfiddle.net/Lvc0u55v/8866/

答案 2 :(得分:0)

您可以创建自定义过滤器,如下所示。

angular.module('myFilters', []).
filter('byAlarmCount', function() {
  return function(alarms, severity) {
    var items = {
      severity: severity,
      out = []
    };
    angular.forEach(alarms, function(v, k)) {
        if (this.severity[v.severity] === true) {
          this.out.push(v);
        }
      }
    return items.out;
  }
});

DOM如下

<ul>
    <li ng-repeat="alarm in list | byAlarmCount:severityFilter">{{alarm.location}: {{alarm.alarmType}}</li>
</ul>

答案 3 :(得分:0)

如果您希望进行一些复杂的过滤,那么最好查看一些第三方JS库,如lodash(https://lodash.com/)或Underscore(http://underscorejs.org/)。

这些提供了大量可用于过滤,映射和其他常用实用程序功能的实用程序。

例如,对于当前场景,您可以使用来自underscorejs的_.where / _.filter。

var filteredAlarms = _.where(<YOUR LIST>, { severity: NORMAL, alarmType: ...});