javascript - Angularjs 过滤器始终返回 true

标签 javascript angularjs angularjs-filter

我为 ng-repaet 制作了过滤器,如下所示:

  $scope.filterRoutine = function(col) {
        return _.isEqual(col.Routine.IsIndoor, true);
}

它工作正常(isEqual 返回 true 或 false)。

但这不起作用,我不知道为什么(当我说它不起作用时,我没有收到任何错误,但 View 没有改变)

 $scope.filterRoutine = function(col) {
         return _.forEach(tempData, function (temp) {
                    if (_.find(col.Exercises, { Exercise: temp })) {
                        return true;                          
                    } else {
                        return false;
                    }
            });
}

我在这里所做的(或者更确切地说我想做的)是这样的:我有 tempData 集合,如果我的 col.Exercises 至少有 tempData 中的一项,那么它应该显示在 View 中。 但由于某种原因,所有项目都显示在 View 中,即没有任何内容被过滤。

我的猜测是,这是因为这个函数总是返回 true (因为总是至少有一个 col.Exercises 应该包含 tempData 中的项目)。

如何解决这个问题,即隐藏所有不包含 tempData 中任何项目的列?

最佳答案

_.forEach 返回不做你期望它做的事情。 您需要执行以下操作:

$scope.filterRoutine = function(col) {
     var x = false;

     _.forEach(tempData, function (temp) {
                if (_.find(col.Exercises, { Exercise: temp })) {
                    x = true;                          
                }
        });

     return x

}

此外,“回调可能会通过显式返回 false 来提前退出迭代。”,这意味着您的 return false 在第一次 _.find 返回 后停止迭代假

关于javascript - Angularjs 过滤器始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812330/

相关文章:

node.js - 动态生成子域

javascript - 使用 AngularJS Filter 过滤数据。如何迭代对象?

javascript - 提交 from,由 ajax 请求处理

JavaScript:为什么更改参数变量会更改 `arguments` "array"?

angularjs - 使用 ng-repeat 在 Angular 中渲染数组表

javascript - ngAnimate 在使用 requirejs 时不工作

angularjs - 具有过滤属性的 ng-repeat 过滤器

javascript - AngularJS ng-repeat orderBy 订单编号不正确

javascript - 不想复制 Jquery 中的隐藏行

javascript - 寄生构造函数模式与工厂模式在技术上有何不同