const arr = [
{
name: "zhao",
age: 18,
gender: "male",
status: "teacher",
income: "1000",
},
{
name: "zhao",
age: 20,
gender: "female",
status: "banker",
income: "2000",
},
{
name: "zhao",
age: 20,
gender: "male",
status: "teacher",
income: "3000",
},
......
];
以上面的数组为例,想实现对该数组进行任意单一条件或组合条件查询, 条件是数组中对象的属性名。如我想查询name =zhao, 可得到3条数据,若想再加一个age=20,就可以得到第二条数据,再加一个条件gender=female,就得到第三条.
const arr = [
{
name: "zhao",
age: 18,
gender: "male",
status: "teacher",
income: "1000",
},
{
name: "zhao",
age: 20,
gender: "female",
status: "banker",
income: "2000",
},
{
name: "zhao",
age: 20,
gender: "male",
status: "teacher",
income: "3000",
}
];
function test(params){ return arr.filter(item=>Object.keys(params).map(key=>params[key]==item[key]).filter(key=>!key).length==0) }
console.log(test({name:'zhao'}))
console.log(test({name:'zhao',age:20}))
console.log(test({name:'zhao',age:20,status: "teacher"}))
const arr = [
{
name: "zhao",
age: 18,
gender: "male",
status: "teacher",
income: "1000",
},
{
name: "zhao",
age: 20,
gender: "female",
status: "banker",
income: "2000",
},
{
name: "zhao",
age: 20,
gender: "male",
status: "teacher",
income: "3000",
},
];
function query(data, condition) {
if (!condition) return data
return data.filter(item => {
for (const key in condition) {
if (item[key] !== condition[key]) return false
}
return true
})
}
console.log(query(arr, {
name: 'zhao',
age: 20,
gender: 'female'
}));
应该没啥问题
const arr = [
{
name: "zhao",
age: 18,
gender: "male",
status: "teacher",
income: "1000",
},
{
name: "zhao",
age: 20,
gender: "female",
status: "banker",
income: "2000",
},
{
name: "zhao",
age: 20,
gender: "male",
status: "teacher",
income: "3000",
},
];
function getData(arr, query) {
//arr是要查询的数组
//query是条件
//如果arr不是数组或者query不是对象返回空数组
if (!Array.isArray(arr) || query.constructor !== Object) {
return []
}
//获取对象的所有key
let queryKes = Object.keys(query)
console.log("keys:", queryKes)
//是数组、是对象的情况
return arr.filter(item => {
//判断查询条件的所有的key是否都有
let itemKeys = Object.keys(item) // name、age、gender ....
//如果查询条件对象的key有一个不在数组元素对象的key里 或者查询条件的key多于数组元素的key
if (queryKes.findIndex(e => !itemKeys.includes(e)) !== -1 || queryKes.length > itemKeys.length) {
return false
} else {
//这里queryKes key的个数小于等于itemKeys key的个数
return queryKes.every(e => item[e] == query[e])
}
})
}
// arr不是数组
console.log("arr不是数组:", getData(1, {
age: 18
}))
//arr是数组、query是对象 一个条件
console.log("arr是数组、query是对象,一个条件:", getData(arr, {
age: 18
}))
//多个条件
console.log("多个条件", getData(arr, {
name: 'zhao',
age: 20
}))
结果:
其实js有这方面的库,库肯定更加准确,考虑的更加全面,可以直接用https://www.lodashjs.com/
已经过运行测试,结果没问题,希望采纳,谢谢
const arr = [
{
name: "zhao",
age: 18,
gender: "male",
status: "teacher",
income: "1000",
},
{
name: "zhao",
age: 20,
gender: "female",
status: "banker",
income: "2000",
},
{
name: "zhao",
age: 20,
gender: "male",
status: "teacher",
income: "3000",
},
];
// 查询的条件
let filters = [
{name:"zhao"},
{age:20},
];
let filterList = arr.filter((item) => {
let isShow = filters.every((prop) => {
let key = Object.keys(prop)[0];
let value = prop[key];
return item.hasOwnProperty(key) && item[key] == value;
})
return isShow;
})
console.log(filterList)