根据值数组从Angular中的JSON过滤选择

时间:2016-06-14 07:46:23

标签: javascript jquery angularjs filter angular-filters

所以我的数据集看起来像这个(更多的统计数据背后但让我们保持这个简单)

$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);

我想我在这里错过了一小段......

3 个答案:

答案 0 :(得分:2)

  

使用Array#filterArray#indeOf一起测试array

中的值

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

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;
}

<强> Example Fiddle

答案 2 :(得分:0)

对于更大的数据量,您可以使用哈希表来加快查找速度

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过滤它。

$scope.friendData = peopleData.filter(a => friends.includes(a.name));