我有一些名为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将“任务”视为对象而不是数组。有没有办法强制角度将我的自定义数组识别为数组,以便我可以使用过滤器?谢谢!
答案 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);
};
};