ngRepeat将类似数组的对象视为对象而不是数组

时间:2015-03-12 17:03:40

标签: javascript arrays angularjs object ng-repeat

我有一些名为NoDupesArray的东西。我用它来创建一个不允许重复项目的数组。以编程方式,它是一个扩展Array原型的对象,如下所示(让我们不要争论Object.create vs this):

function NoDupesArray(){}
NoDupesArray.prototype = Array.prototype
NoDupesArray.prototype.push = function(){
    //...blahblahblha
}

不幸的是,当我在Angular的ng-repeat中使用这个数组时,我不能使用Angular的内置过滤器功能。这不起作用:

<li class="row" ng-repeat="task in tasks | filter:{completed_at:'!null'}"></li>

我认为这是因为angular将“任务”视为对象而不是数组。有没有办法强制角度将我的自定义数组识别为数组,以便我可以使用过滤器?谢谢!

3 个答案:

答案 0 :(得分:0)

所以现在我使用的解决方案是:

<li class="row" ng-repeat="task in tasks.slice() | filter:{completed_at:'!null'}"></li>

这会将NoDupesArray变回一个普通的旧数组,但我认为必须有更好的方法来做到这一点。

答案 1 :(得分:0)

如果任务是对象,您仍然可以使用ng-repeat。您应该为对象中的值和键提供两个变量,如下所示:

<li class="row" ng-repeat="(key, task) in tasks | filter:{completed_at:'!null'}"></li>

答案 2 :(得分:0)

保持Array.push()的原始功能

NoDupesArray.prototype.push = function (){
  return function() {
    var uniqueArguments = getItemsNotInArray(this, arguments);
    return Array.prototype.push.apply(this, uniqueArguments);
  };
};