Search array of object with filter and keyword

arrays, filter, javascript, search

Solution

You can use the `Array.prototype.filter` function which takes a callback and filters accordingly. Per the documentation:

The `filter()` method creates a new array with all elements that pass the test implemented by the provided function.

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:

`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:

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`. If it passes, it is kept, and thus all objects with property `Level` with vale `Standart` are kept. You can also shorten this with ES6 arrow functions:

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`.

Problem

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

Original source