我的问题是对此问题的扩展javascript filter array multiple conditions
从这个问题开始,如果过滤器对象是
{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'
}
];
所以答案是
[
{
"name": "Mark",
"email": "mark@mail.com",
"age": 28,
"address": "England"
}
]
这绝对好,但是我的问题是必须为过滤器对象属性值过滤数组
例如我的过滤器对象将是{address: 'England', name: ''}
,现在它必须过滤all names and address England
的数组
答案 0 :(得分:1)
您将对用户以及每个过滤器对象的条目使用过滤器
const filter = {address: 'England', name: 'Mark'};
const res = users.filter(user =>
Object.entries(filter)
.every(([k,v]) => v === '' || user[k] === v)
);
console.log(res);
<script>
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'
}
];
</script>
答案 1 :(得分:0)
在您提到的帖子中的示例中,如果过滤器为空白,则继续
var filter = {address: 'England', name: ''}
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 (filter[key] == "") continue; // added this:
if (item[key] === undefined || item[key] != filter[key])
return false;
}
return true;
});
console.log(users)
答案 2 :(得分:0)
您可以结合使用filter
和every
和三元逻辑来确定过滤器值是否为空以获取全部。
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 filter1 = {address: 'England', name: 'Mark'};
var filter2 = {address: 'England', name: ''};
function findResults(input, filterObj){
return input.filter(
item => Object.keys(filterObj)
.every(r => filterObj[r].length
? item[r] == filterObj[r]
: true)
)
}
console.log('with address and name', findResults(users,filter1));
console.log('with address only', findResults(users,filter2));
答案 3 :(得分:0)
如果我正确理解您的问题,则需要以下输出。 如果是这种情况,那么您正在寻找Array.filter的用例就足够了。 看一下code sandbox,我在其中创建了一个函数filterByObj,该函数将arr,filterObj作为参数并返回给定的{地址:“ England”,名称:“”}}
的输出。答案 4 :(得分:-2)
在这种情况下,您需要df
id app_0 app_1 app_2 sex top_1 top_2
0 1 a b c 0 b c
1 2 b c b 0 b c
2 3 c d a 1 a d
3 4 d NaN a 1 a d
。
filter