2017-07-13 47 views
0

我需要实现过滤对象数组的函数。 Filters数组由具有属性名称和值的对象组成,以便根据用户中的给定属性进行过滤。对象数组的筛选函数

例子:

var filters = [ 
    { 
    column: 'username', 
    value: 'test user' 
    }, 
    { 
    column: 'name', 
    value: 'test name' 
    } 
] 

var users = [ 
    { 
     name: 'test name user', 
     username: 'some test user' 
    }, 
    { 
     name: 'another name', 
     username: 'another username' 
    } 
] 

// filter logic 

console.log(users); // [{'name': 'test name user', 'username': 'some test user'}] 
+1

心灵向我们展示你的企图? – Ethan

+0

你使用过滤阵列的方法吗? – evolutionxbox

+1

您可以使用'Array'上的原生'filter'函数:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter。或者你可以使用包含'filter'函数的'lodash'库:https://lodash.com/docs/4.17.4#filter –

回答

2

您可以通过Array#some迭代(或者 - 如果至少一个匹配)遍历用户列表和Array#filter他们或Array#every(和 - 都必须一致)。

var filters = [{"column":"username","value":"test user"},{"column":"name","value":"test name"}]; 
 

 
var users = [{"name":"test name user","username":"test user"},{"name":"another name","username":"another username"}]; 
 

 
var result = users.filter(function(user) { 
 
    return filters.some(function(filter) { // use some for Or, and every for And 
 
    return user[filter.column] === filter.value; 
 
    }); 
 
}); 
 

 
console.log(result);

+0

你击败了我 – Endless

0

您还可以使用Functions#ArrowFunctions和сhange原始数组一样:

var filters = [{"column":"username","value":"test user"},{"column":"name","value":"test name"}]; 
 

 
var users = [{"name":"test name user","username":"test user"},{"name":"another name","username":"another username"}]; 
 

 
users = users.filter((user) => { 
 
    return filters.some((filter) => { 
 
    return user[filter.column] === filter.value; 
 
    }); 
 
}); 
 

 
console.log(users);