【问题标题】:Filter NOT equals in AngularJS在AngularJS中过滤不等于
【发布时间】:2016-04-05 05:41:54
【问题描述】:

我在客户端有一个对象数组。 数组中的对象如下所示:

{
    code: 0,
    short_name: 'a',
    type: 1
}

我尝试将此数组过滤为 2 个数组:

  1. 类型 === 1
  2. 类型为 !== 1

我这样做了:

$scope.array1 = $filter('filter')(data, {type: 1}, true);
$scope.array1 = $filter('filter')(data, {type: !1});

但是不等于不起作用...我该怎么办?

谢谢!

【问题讨论】:

    标签: arrays angularjs filter


    【解决方案1】:

    同样,如果您只是要去filter,请改用native method

    $scope.array1 = data.filter(x => x.type === 1);
    $scope.array2 = data.filter(x => x.type !== 1);
    

    【讨论】:

    • 我不能尝试这个,因为我不能在 ES6 中使用。
    • @prog_prog 欢迎您,乐于助人! (我很抱歉 es2015 语法只是我非常喜欢它:P)
    • 我也喜欢...也许在未来... :-)
    • @Kutyel,检查这个小提琴http://jsfiddle.net/U3pVM/33383/,为什么最后一个没有显示在列表中,事件最后一个id是-12而不是-1??
    • 嗨@chiragsatapara,检查更新的小提琴jsfiddle.net/U3pVM/33384,这是一个更实际的例子,说明如何使用JS原生函数而不是角度“魔法”,这似乎是在做字符串比较或其他什么像那样(如果这对您有帮助,请投票赞成答案;)
    【解决方案2】:

    你很亲密。您只需将第二个过滤器更改为:

    $scope.array2 = $filter('filter')(data, { type: '!1' });
    

    我还重命名了范围变量,否则它只会覆盖您的第一个过滤数组。

    【讨论】:

    • 我之前尝试过,但效果不佳...因为此过滤器还会删除所有类型包含 1 的对象(例如:12、13 等)
    • 但是假设您使用的是键而不是字符串,那么只需在上面进行编辑,例如..'!' + your_key
    【解决方案3】:

    对我来说,给定的解决方案 { type: '!1' } 在与 true 作为最后一个参数 $filter('filter')(data, {type: 1}, true); 一起使用时不起作用。但是使用函数对我有用(请参阅angular's doc):

    $scope.array2 = $filter('filter')(data, function(value, index, array) {
                return (value.type !== 1);
            }, true);
    

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2014-05-05
      相关资源
      最近更新 更多