Javascript 如何在AngularJs ng repeat中按数组过滤?

Javascript 如何在AngularJs ng repeat中按数组过滤?,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我正在使用ng repeat显示我的数据。这很好 my ng repeat结果集中的一个数据字段是项数组。 示例:{x:1,y:[2,3,4]} 我想按数组中的数据逐个筛选。我可以很容易地根据非数组数据进行过滤,但是当我试图通过查看数组中的inisde来过滤文件时,我遇到了麻烦 这是我的标记 ng repeat=“cons中的con |过滤器:con.conPlayerList中的usrSingle.username” (编辑标记以更好地匹配我的示例ng repeat=“con in cons

我正在使用ng repeat显示我的数据。这很好

my ng repeat结果集中的一个数据字段是项数组。
示例:{x:1,y:[2,3,4]}
我想按数组中的数据逐个筛选。我可以很容易地根据非数组数据进行过滤,但是当我试图通过查看数组中的inisde来过滤文件时,我遇到了麻烦

这是我的标记
ng repeat=“cons中的con |过滤器:con.conPlayerList中的usrSingle.username”

(编辑标记以更好地匹配我的示例
ng repeat=“con in cons | filter:'3'in con.y”

usrSingle是我可以访问的控制器中的一个作用域。我没有得到任何错误,我似乎找不到这样的例子

请求了更多的代码,如下所示。我忘了提到这是一个卑鄙的应用程序。我让MongoDB提供数据。我使用RESTAPI进行数据调用

(编辑)来自角度模块的代码:

// call to the api for data
app.factory('usrService', function ($resource) {
return $resource('/api/users', {});
});
// factory to hold user data between controllers
app.factory('usrTracker', function () {
var vUsrProfile = {
    usrSingle: 'usrSingle'
};
return {
    getProperty: function () {
        return vUsrProfile;
    },
    setProperty: function (value) {
        vUsrProfile = value;
    }
};
});
// angular controller
app.controller('usrPageController', function ($scope, usrTracker, conService, postService) {

var usrSingle = usrTracker.getProperty();
$scope.usrSingle = usrSingle;
$scope.cons = conService.query();
$scope.posts = postService.query();
});
(最终编辑)为这一问题标记的答案是一个很好的解决方案。但我走了另一个方向。我使用mongoDB$unwind聚合来分解我的数据,如下所示

API文件中的代码:

// get
.get(function (req, res) {
// unwind on the conPlayerList array field
Con.aggregate([{ $unwind: "$conPlayerList" }], function (err, cons) {
return res.json(cons);
});
})
然后我过滤了我正在寻找的用户。将HTML角度标记更改为

ng repeat=“con-in-cons |过滤器:{conPlayerList:usrSingle.username}”

为了更好地匹配我的示例,请删除我的特定代码:


ng repeat=“con in cons | filter:{y:'3'}”
您可以在数组上使用Angular的内置逻辑,但请记住,这不是精确匹配,如果
usrSingle
设置为3,将与300的数组条目匹配,请参见中的示例

视图:

视图:

。。。

您最好编写自己的过滤函数。考虑使用辅助库,如LADASH(下划线)。你能提供更多的代码,这样就很容易想出不同的解决方案来解决你的问题。您可能根本不需要使用过滤器。我认为这需要单独的过滤器。我可以这样做,但我想知道是否有一种方法可以查看由ng repeat命令返回的数组内部。ng repeat中的数据很可能包含数组字段。如果没有筛选函数,没有视图语法可以做到这一点。我不熟悉Angular,所以我想确保我没有遗漏一些简单的内容。过滤函数是处理这类问题的一个很好的选择。这是一个很好的解决方法,但不是我想要的答案。听起来,在某一点进行过滤的唯一方法是使用自定义函数。我用我的代码测试了你的功能,控制器功能运行得很好。我会坚持我的MongoDB放松的时刻,但我感谢你的回答和细节。谢谢,不客气!啊,我更了解你的问题-更新的答案,再加上一个你可能会发现有用的例子。@sheilak,你能帮我吗
<div ng-repeat = "con in cons | filter:{y:usrSingle} ">...</div> 
app.controller('usrPageController', function ($scope) {
  $scope.filterFn = filterFn;
  $scope.usrSingle = 3;
  $scope.cons = [
      {x:0, y:[1,2,3]},
      {x:1, y:[2,3,4]},
      {x:2, y:[3,4,5]},
      {x:3, y:[4,5,6]},
      {x:4, y:[5,6,7]}
  ];

  function filterFn(con){
    return con.y.indexOf($scope.usrSingle) > -1;
  }
});
<div ng-repeat = "con in cons | filter:filterFn">...</div>
app.filter('customFilter', function() {
  return function(input, value) {
    var result = [];
    input.forEach(function(item){
        if(item.y.indexOf(value) > -1){
            result.push(item);
        }
    });
    return result;
  };
});
<div ng-repeat = "con in cons | customFilter:usrSingle">...</div>