Javascript 使用.Filter筛选对象数组
如果有JSON对象,我如何使用.filter根据filters对象筛选数组Javascript 使用.Filter筛选对象数组,javascript,filter,Javascript,Filter,如果有JSON对象,我如何使用.filter根据filters对象筛选数组 data = [ {month: 'Sep', name: 'Fred', department: 'Accounting'}, {month: 'Sep', name: 'David', department: 'Sales'}, {month: 'Oct', name: 'Jon', department: 'Sales'} ] filters = { month: [], nam
data = [
{month: 'Sep', name: 'Fred', department: 'Accounting'},
{month: 'Sep', name: 'David', department: 'Sales'},
{month: 'Oct', name: 'Jon', department: 'Sales'}
]
filters = {
month: [],
name: ['Jon'],
department: ['Sales','Accounting']
}
通过检查每个过滤器的键是否存在于对象中,以及其值是否包含在过滤数组中,您可以过滤数据
您可以通过检查每个筛选器的键是否存在于对象中以及其值是否包含在筛选数组中来筛选数据。您可以使用filter()
和every()
方法来完成此操作
var数据=[
{月份:'Sep',姓名:'Fred',部门:'Accounting'},
{月份:'Sep',姓名:'David',部门:'Sales'},
{月份:'Oct',名称:'Jon',部门:'Sales'}
]
变量过滤器={
月份:[],
姓名:['Jon'],
部门:[“销售”、“会计”]
}
var result=data.filter(e=>{
return Object.keys(过滤器).every(f=>{
返回筛选器[f]。包括(e[f])| |!筛选器[f]。长度
})
})
console.log(result)
您可以使用filter()
和every()
方法执行此操作
var数据=[
{月份:'Sep',姓名:'Fred',部门:'Accounting'},
{月份:'Sep',姓名:'David',部门:'Sales'},
{月份:'Oct',名称:'Jon',部门:'Sales'}
]
变量过滤器={
月份:[],
姓名:['Jon'],
部门:[“销售”、“会计”]
}
var result=data.filter(e=>{
return Object.keys(过滤器).every(f=>{
返回筛选器[f]。包括(e[f])| |!筛选器[f]。长度
})
})
console.log(结果)
let数据=[
{月份:'Sep',姓名:'Fred',部门:'Accounting'},
{月份:'Sep',姓名:'David',部门:'Sales'},
{月份:'Oct',名称:'Jon',部门:'Sales'}
];
让过滤器={
月份:[],
姓名:['Jon'],
部门:[“销售”、“会计”]
};
让matches=data.filter(函数(o){
//迭代筛选对象的键
for(此字段中的常量键){
//如果筛选器数组为空且
//值不在筛选器数组中
if(此[key].length>0&&!此[key].includes(o[key])){
//对象不匹配
返回false;
}
}
//如果对象通过了每个筛选器数组
//对象是匹配的
返回true;
},过滤器);
console.log(匹配项)代码>
let数据=[
{月份:'Sep',姓名:'Fred',部门:'Accounting'},
{月份:'Sep',姓名:'David',部门:'Sales'},
{月份:'Oct',名称:'Jon',部门:'Sales'}
];
让过滤器={
月份:[],
姓名:['Jon'],
部门:[“销售”、“会计”]
};
让matches=data.filter(函数(o){
//迭代筛选对象的键
for(此字段中的常量键){
//如果筛选器数组为空且
//值不在筛选器数组中
if(此[key].length>0&&!此[key].includes(o[key])){
//对象不匹配
返回false;
}
}
//如果对象通过了每个筛选器数组
//对象是匹配的
返回true;
},过滤器);
console.log(匹配项)代码>这里没有2d数组。不清楚你想做什么出色的观测我改变了标题这里没有2d阵列。不清楚你想做什么出色的观察我更改了标题请解释你的代码。没有教学,你只是在抛出一个答案,这是一个糟糕的答案。请解释你的代码。如果不进行教学,你只会给出一个答案,这是一个糟糕的答案。我看不出对象的键(这个)
比过滤器中的键
@JonasW有任何优势。一个优点是前者不迭代继承的可枚举键,只拥有可枚举键,但我同意在这种情况下,在
中为…使用更容易。我看不到对象的键的任何优点。键(此)
优于过滤器中的键。一个优点是前者不迭代继承的可枚举键,只拥有可枚举键,但我同意在这种情况下,在
中为…使用更容易。
data.filter(obj => filters.month.indexOf(obj.month) > -1 && filters.name.indexOf(obj.name) > -1 && filters.department.indexOf(obj.department) > -1)
const result = data.filter(entry => {
for(var key in filters){
if(filters[key].length && !filters[key].includes(entry[key]) )
return false;
}
return true;
});