簡體   English   中英

根據值數組過濾Angular中JSON中的選擇

[英]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#filterArray#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM