复制代码,点击这里查看结果~
方法一
let data = [ {
name: '国-红楼梦',
price: 123,
stock: 108
}, {
name: '国-西游记',
price: 99,
stock: 151
}, {
name: '国-水浒传',
price: 708,
stock: 72
}, {
name: '国-三国演义',
price: 58,
stock: 72
}, {
name: '外-荆棘鸟',
price: 45,
stock: 65
}, {
name: '外-格列佛游记',
price: 69,
stock: 151
}, {
name: '外-荷马史诗',
price: 48,
stock: 123
} ]
function filter(condition, data){
return data.filter( item => {
return Object.keys( condition ).every( key => {
return String( item[ key ] ).toLowerCase().includes(
String( condition[ key ] ).trim().toLowerCase() )
} )
} )
}
var condition={name: '',price: ''};
var aa = filter(condition,data);
console.log("=== 无条件 ===");
console.log(aa);
var condition={name: '国'};
var bb = filter(condition,data);
console.log("=== 单条件 ===");
console.log(bb);
var condition={name: '国',stock: 72};
var cc = filter(condition,data);
console.log("=== 多条件 ===");
console.log(cc);
方法二
let data = [ {
name: '国-红楼梦',
price: 123,
stock: 108
}, {
name: '国-西游记',
price: 99,
stock: 151
}, {
name: '国-水浒传',
price: 708,
stock: 72
}, {
name: '国-三国演义',
price: 58,
stock: 72
}, {
name: '外-荆棘鸟',
price: 45,
stock: 65
}, {
name: '外-格列佛游记',
price: 69,
stock: 151
}, {
name: '外-荷马史诗',
price: 48,
stock: 123
} ]
let name= ['国-西游记', '外'];
let price= [123, 48, 69];
let stock= [];
let result = data.filter((a,i)=>{
return (stock.some(f => (f === a.stock)) && price.some(f => (f === a.price)) || name.some(f => (a.name.includes(f))) )
});
console.log(result);