使用过滤器和关键字搜索对象数组

时间:2016-10-31 03:53:08

标签: javascript jquery arrays search

我有一个数组,过滤器和关键字。 我想使用过滤器和关键字在该数组中搜索,也使用对象的结果数组。就像第一个阵列一样。

var data = [
  {email: "usera@gmail.com",nama:"User A", Level:"Super Admin"},
  {email: "userb@gmail.com",nama:"User B", Level:"Super Admin"},
  {email: "userc@gmail.com",nama:"User C", Level:"Standart"},
  {email: "userd@gmail.com",nama:"User D", Level:"Standart"},
  {email: "usere@gmail.com",nama:"User E", Level:"Admin"},
  {email: "userf@gmail.com",nama:"User F", Level:"Standart"}
];
var filter = "Level";
var keyword = "Standart";

//--------Search


console.log(data);

5 个答案:

答案 0 :(得分:3)

您可以使用Array.prototype.filter函数进行回调并相应地过滤。根据文件:

  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

回调是提供的函数,它有三个参数。来自文档:

  

<强> callback

     

Function是一个谓词,用于测试数组的每个元素。返回true以保留元素,否则返回false,取三个参数:

     

element

     

数组中正在处理的当前元素。

     

index

     

数组中正在处理的当前元素的索引。

     

array

     

调用了数组过滤器。

我们可以使用element检查当前元素并测试是否应该过滤它,如下所示:

var data = [
  {email: "usera@gmail.com",nama:"User A", Level:"Super Admin"},
  {email: "userb@gmail.com",nama:"User B", Level:"Super Admin"},
  {email: "userc@gmail.com",nama:"User C", Level:"Standart"},
  {email: "userd@gmail.com",nama:"User D", Level:"Standart"},
  {email: "usere@gmail.com",nama:"User E", Level:"Admin"},
  {email: "userf@gmail.com",nama:"User F", Level:"Standart"}
];
var filter = "Level";
var keyword = "Standart";

var filteredData = data.filter(function(obj) {
	return obj[filter] === keyword;
});

console.log(filteredData);

这里,我们使用一个回调(测试)来检查obj中指定的当前元素(filter)的属性是否严格等于keyword。如果它通过,则保留它,因此保留具有值为Level的属性Standart的所有对象。您也可以使用ES6 arrow functions缩短此内容:

var filteredData = data.filter((obj) => obj[filter] === keyword);

这只是上述的简写。它实际上是相同的,根据当前元素的Level属性是否严格等于keyword来返回true或false。

答案 1 :(得分:0)

您可以使用filter()函数根据以下条件过滤掉元素:

> var data = [
  {email: "usera@gmail.com",nama:"User A", Level:"Super Admin"},
  {email: "userb@gmail.com",nama:"User B", Level:"Super Admin"},
  {email: "userc@gmail.com",nama:"User C", Level:"Standart"},
  {email: "userd@gmail.com",nama:"User D", Level:"Standart"},
  {email: "usere@gmail.com",nama:"User E", Level:"Admin"},
  {email: "userf@gmail.com",nama:"User F", Level:"Standart"}
];
> var newData=data.filter(function(x) { return x.Level == 'Standart'})
> console.log(JSON.stringify(newData))
[{"email":"userc@gmail.com","nama":"User C","Level":"Standart"},{"email":"userd@gmail.com","nama":"User D","Level":"Standart"},{"email":"userf@gmail.com","nama":"User F","Level":"Standart"}]

答案 2 :(得分:0)

您可以使用array.prototype.filter()函数通过自定义函数过滤数组:

var data = [
  {email: "usera@gmail.com",nama:"User A", Level:"Super Admin"},
  {email: "userb@gmail.com",nama:"User B", Level:"Super Admin"},
  {email: "userc@gmail.com",nama:"User C", Level:"Standart"},
  {email: "userd@gmail.com",nama:"User D", Level:"Standart"},
  {email: "usere@gmail.com",nama:"User E", Level:"Admin"},
  {email: "userf@gmail.com",nama:"User F", Level:"Standart"}
];
var filter = "Level";
var keyword = "Standart";

//--------Search
var filtered_data = data.filter(function(item) {
    return item[filter] == keyword
})

console.log(filtered_data);

答案 3 :(得分:0)

您可以在此处使用数组过滤器方法来实现目标。

&#13;
&#13;
var data = [{
  email: "usera@gmail.com",
  nama: "User A",
  Level: "Super Admin"
}, {
  email: "userb@gmail.com",
  nama: "User B",
  Level: "Super Admin"
}, {
  email: "userc@gmail.com",
  nama: "User C",
  Level: "Standart"
}, {
  email: "userd@gmail.com",
  nama: "User D",
  Level: "Standart"
}, {
  email: "usere@gmail.com",
  nama: "User E",
  Level: "Admin"
}, {
  email: "userf@gmail.com",
  nama: "User F",
  Level: "Standart"
}];
var filter = "Level";
var keyword = "Admin";

var filteredArray = data.filter((item) => item[filter] === keyword);
console.log(filteredArray);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

你可以用更好的方式使用$ .grep

var filter = "Level";
var keyword = "Standart";

这是一个演示:

var data = [
  {email: "usera@gmail.com",nama:"User A", Level:"Super Admin"},
  {email: "userb@gmail.com",nama:"User B", Level:"Super Admin"},
  {email: "userc@gmail.com",nama:"User C", Level:"Standart"},
  {email: "userd@gmail.com",nama:"User D", Level:"Standart"},
  {email: "usere@gmail.com",nama:"User E", Level:"Admin"},
  {email: "userf@gmail.com",nama:"User F", Level:"Standart"}
];
var filter = 'Level';
var keyword = 'Standart';
var s = [];
var s = $.grep(data,function(object,index){
   return object.Level == 'Standart';
});

console.log(s);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>