过滤大于和长度angularjs

时间:2015-08-06 14:21:00

标签: angularjs

我需要在项目之后添加的书籍长度,这是我的控制器:

$scope.items = [
    {"added_days_ago": 5, "books": [{"id":1, "added_days_ago": 6}, {"id":2, "added_days_ago": 3}, {"id":3, "added_days_ago": 4}]},          
    {"added_days_ago": 2, "books": [{"id":4, "added_days_ago": 3}]}
]

在控制器中我需要定义filteredBooksLength(我使用ng-table),然后显示如下:

{{filteredBooksLength}}

类似的东西:

filteredBooksLength = (books where book.added_days_ago > item.added_days_ago).length

JSFiddle

1 个答案:

答案 0 :(得分:1)

$scope.filteredBooksLength = function (item) {
  return item.books.filter(function (book) {
    return book.added_days_ago > item.added_days_ago
  }).length

应该满足您的需求 - 在ng-repeat区块内召唤它,并传递当前项目 - filteredBooksLength(item)

jsFiddle

如何运作

我们将范围访问给接受项对象作为参数的函数。我们在该对象上获取books数组并通过filter函数传递它,该函数仅返回book.added_days_ago大于item.added_days_ago的数据库作为数组。然后我们测量该数组的长度并将其返回。

关于风格的说明

从你所写的内容 - 以及你提出问题的方式 - 看起来你已经完成了一些Python。在JS中使用camelCase而不是snake_case是公认的做法 - 您可能希望更改items对象中的键。另外,这些键周围的""是多余的。

坚持下去!