![](/img/trans.png)
[英]Trying to populate array with string values based on filter selections, and filter records by comparing the array to string value of record attribute
[英]Filter selections from JSON in Angular based on array of values
所以我的數據集看起來像這樣(它背后的更多統計信息,但讓它保持簡單) :
$scope.peopleData = [
{"name": "Name1", "img": "name1Img.png"},
{"name": "Name2", "img": "name2Img.png"}...
];
通過一個簡單的顯示所有項目的方法就可以了:
<div ng-repeat="person in peopleData">
<img src="img/people/{{person.img}}" alt="{{person.name}}" />
</div>
現在,假設我正在存儲朋友,並且有一個不同的部分僅列出特定的人。 以一個數組為例:
var friends = ["Name4", "Name9"];
我將如何編寫返回的函數:
$scope.friends = [
{"name": "Name4", "img": "name4Img.png"},
{"name": "Name9", "img": "name9Img.png"}...
];
本質上,我想搜索所有的peopleData並根據數組中包含的幾個值返回一個較小的數組?
當然,必須有一種簡單的方法來使用.filter()查找多個字符串作為可接受的值?
$scope.friendData = peopleData.filter(friends);
我想我只是在這里想念一小片...
使用
Array#filter
和Array#indeOf
來測試array
的值
var friends = [{ "name": "Name4", "img": "name4Img.png" }, { "name": "Name9", "img": "name9Img.png" }, { "name": "Name10", "img": "name10Img.png" }]; var friendsArr = ["Name4", "Name9"]; var friendData = friends.filter(function(item) { return friendsArr.indexOf(item.name) !== -1; //`item.name` exists in `friendsArr` }); console.log(friendData);
function getFriendsDetails()
{
var friends = ["Name4", "Name9"];
var friendsDetails = [];
for(var i = 0; i<friends.length;i++)
{
var friend = friends[i];
friendsDetails.push({"name":friend, "img":(friend.toLowerCase()+"Img.png")});
}
return friendsDetails;
}
對於更大的數據量,您可以使用哈希表來加快查找速度
var $scope = {}, friends = ["Name4", "Name9"]; $scope.peopleData = [{ "name": "Name1", "img": "name1Img.png" }, { "name": "Name4", "img": "name4Img.png" }], $scope.friendData = $scope.peopleData.filter(function (friends) { var hash = Object.create(null); friends.forEach(function (a) { hash[a] = true; }); return function (a) { return hash[a.name]; }; }(friends)); console.log($scope.friendData);
在ES6中,您可以使用Array.includes
對其進行Array.includes
。
$scope.friendData = peopleData.filter(a => friends.includes(a.name));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.