如何在angularjs中通过数组来过滤对象?

How can you filter objects by an array in angularjs

本文关键字:数组 过滤 对象 angularjs      更新时间:2023-09-26

我只是想知道你是否可以用另一个数组的过滤器来过滤一个现有的数组。

原来的json是:

[
   {
    "bookname": "harryporter",
    "year": "2000",
    "author":"J. K. Rowling"
   }, 
   {
    "bookname": "Sleepless",
    "year": "2003",
    "author":"Connie Ann Michael"
   },
   {
    "bookname": "No man's land",
    "year": "1993"
    "author":"Harold Pinter"
   }
];

过滤数组:

[
"year":"1993"
"bookname":"No man"
]

也有一种方法来动态地添加元素到数组,当你编辑输入,也许键入文本?

例如:

输入

<div>
<input type="text" ng-model={{ filterArray.insert("bookname":"value") }}>Book Name
</div>
<<p> 过滤器/strong>
<div ng-repeat="books in originalJson | filter: filterArray">
{{books.author}}
</div>

我希望我已经解释了我的问题,谢谢

如果你想通过多个值进行过滤,你可以传入一个filter-object。
每个键对应一个字段名,每个值根据对应的键过滤项。

Book name: <input type="search" ng-model="filterObj.bookname" />
Year:      <input type="search" ng-model="filterObj.year" />
<div ng-repeat="book in books | filter:filterObj">...</div>

请参见简短演示


如果你想让用户动态指定要过滤的字段,你也可以这样做(尽管这不是很常见的做法):

Filter by:
<input type="search" ng-model="dynamicField"
       placeholder="Field to filter by" />
<input type="search" ng-model="filterObj[dynamicField]"
       placeholder="Value to filter by" />
<div ng-repeat="book in books | filter:filterObj">...</div>