javascript filter array multiple conditions
You can do like this
var filter = { address: 'England', name: 'Mark'};var users = [{ name: 'John', email: 'johnson@mail.com', age: 25, address: 'USA' }, { name: 'Tom', email: 'tom@mail.com', age: 35, address: 'England' }, { name: 'Mark', email: 'mark@mail.com', age: 28, address: 'England' }];users= users.filter(function(item) { for (var key in filter) { if (item[key] === undefined || item[key] != filter[key]) return false; } return true;});console.log(users)
If you know the name of the filters, you can do it in a line.
users = users.filter(obj => obj.name == filter.name && obj.address == filter.address)
Another take for those of you that enjoy succinct code.
NOTE: The FILTER method can take an additional this argument, then using an E6 arrow function we can reuse the correct this to get a nice one-liner.
var users = [{name: 'John',email: 'johnson@mail.com',age: 25,address: 'USA'}, {name: 'Tom',email: 'tom@mail.com',age: 35,address: 'England'}, {name: 'Mark',email: 'mark@mail.com',age: 28,address: 'England'}];var query = {address: "England", name: "Mark"};var result = users.filter(search, query);function search(user){ return Object.keys(this).every((key) => user[key] === this[key]);}// |----------------------- Code for displaying results -----------------|var element = document.getElementById('result');function createMarkUp(data){ Object.keys(query).forEach(function(key){ var p = document.createElement('p'); p.appendChild(document.createTextNode( key.toUpperCase() + ': ' + result[0][key])); element.appendChild(p); });}createMarkUp(result);
<div id="result"></div>