【问题标题】:angularJs unique Filter - not getting unique array lengthangularJs unique Filter - 没有得到唯一的数组长度
【发布时间】:2016-04-01 08:08:54
【问题描述】:

https://github.com/a8m/angular-filter/

我正在使用上面的 Angularjs-filter 库来使用 ng-repeat 中的唯一属性。

下面是我的代码

<div class="rankblock" ng-repeat="item in sports.Ranks.Rank  |unique:'_position'>
<span> {{sports.Ranks.Rank.length}}</span> //
</div>

在 ng-repeat 中唯一后,我的 Rank 数组长度变为 6,但在输出中仍显示 9(原始 Arr 长度)。

【问题讨论】:

  • 过滤器只影响正在显示的数据,而不是原始数组,因此sports.Ranks.Rank.length 按预期显示原始长度。 See this article 得到你所期望的。

标签: angularjs angularjs-ng-repeat angularjs-filter


【解决方案1】:

过滤器内部返回到ng-repeat一个新数组。这就是过滤器的想法——过滤但避免改变输入。换句话说:

ng-repeat="item in sports.Ranks.Rank  | unique:'_position'

这里说ng-repeat去遍历filter函数的结果,这是一个没有重复的新数组,当这里

<span> {{sports.Ranks.Rank.length}}</span>

你还是看原文的长度。

如果你想显示新的数组长度,你可以这样做,例如试试下面的

{{ (sports.Ranks.Rank | unique:'_position').length }}

(从来没有做过那样的事情,也许这行得通),但这仍然不是一个高性能的解决方案。事实上,我要做的是在控制器级别进行重复数据删除。

【讨论】:

  • 是的,它返回原始数组长度..不是唯一数组长度
【解决方案2】:

你可以参考https://github.com/a8m/angular-filter/blob/master/src/_filter/collection/unique.js这个过滤器返回一个新的对象数组。因此它不会改变你原来的对象。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多