简体   繁体   English

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

[英]Search array of object with filter and keyword

I have an array, filter and keyword. 我有一个数组,过滤器和关键字。 i want to search in that array using filter and keyword, with result array of object too. 我想使用过滤器和关键字在数组中搜索,对象的结果数组也是如此。 Just like first array. 就像第一个数组一样。

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

You can use the Array.prototype.filter function which takes a callback and filters accordingly. 您可以使用Array.prototype.filter函数,该函数接受回调并相应地进行过滤。 Per the documentation: 根据文档:

The filter() method creates a new array with all elements that pass the test implemented by the provided function. filter()方法创建一个新数组,其中所有元素都通过了由提供的函数实现的测试。

The callback, which is the provided function, takes three arguments. 回调是提供的函数,带有三个参数。 From the documentation: 从文档中:

callback

Function is a predicate, to test each element of the array. 函数是一个谓词,用于测试数组的每个元素。 Return true to keep the element, false otherwise, taking three arguments: 返回true以保留该元素,否则返回false,采用三个参数:

element

The current element being processed in the array. 数组中正在处理的当前元素。

index

The index of the current element being processed in the array. 数组中正在处理的当前元素的索引。

array

The array filter was called upon. 调用了数组过滤器。

We may use element to check the current element and test if it should be filtered or not, like so: 我们可以使用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); 

Here, we use a callback (the test) that checks if the current element ( obj )'s property specified in filter is strictly equal to keyword . 在这里,我们使用一个回调(测试)来检查在filter指定的当前元素( obj )的属性是否严格等于keyword If it passes, it is kept, and thus all objects with property Level with vale Standart are kept. 如果通过,它将被保留,因此将保留所有具有Valed Standart属性Level对象。 You can also shorten this with ES6 arrow functions : 您还可以使用ES6箭头功能缩短此时间:

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

This is just shorthand for the above. 这只是上面的简写。 It is effectively the same, returning true or false based on if the current element's Level property is strictly equal to keyword . 实际上是相同的,根据当前元素的Level属性严格等于keyword ,返回true或false。

You can use the array.prototype.filter() function to filter through the array with a custome function: 您可以使用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);

You can use the filter() function to filter out the elements based on a condition like this: 您可以使用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"}]

You could just use the array filter method to accomplish your goal here. 您可以只使用数组过滤器方法来完成您的目标。

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

you could do it using $.grep in a better way 你可以用$ .grep更好地做到这一点

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

here is a demo: 这是一个演示:

 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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM