Javascript 基于查询对象筛选对象数组
似乎无法归还我想要的东西。最后,我想返回一个对象数组,或者一个可能匹配两个不同部分键/值过滤器的单个对象。换言之: const curQuery={name:'Nex',tacTechnology:'Dat'} 我计划在一个表的标题中使用多个过滤器Javascript 基于查询对象筛选对象数组,javascript,filter,foreach,Javascript,Filter,Foreach,似乎无法归还我想要的东西。最后,我想返回一个对象数组,或者一个可能匹配两个不同部分键/值过滤器的单个对象。换言之: const curQuery={name:'Nex',tacTechnology:'Dat'} 我计划在一个表的标题中使用多个过滤器 const data = [{ "id": "1", "name": "Unified Communications Portal", "tacTechnology": "Co
const data = [{
"id": "1",
"name": "Unified Communications Portal",
"tacTechnology": "Collaboration"
}, {
"id": "2",
"name": "ACE Training Portal",
"tacTechnology": "Networking Services"
}, {
"id": "3",
"name": "Nexus 5K/2K Training Portal",
"tacTechnology": "Data Center"
}, {
"id": "4",
"name": "XR Training Portal",
"tacTechnology": "Routing"
}]
const curQuery = {name:'Nex'}
function setFilteredItems(curQuery) {
const curQueryKeys = Object.keys(curQuery)
const filteredItems = data.filter(
(item) => {
curQueryKeys.forEach((objKey) => {
if (item[objKey] === undefined || curQuery[objKey] === null){
console.log('its not', item[objKey], curQuery[objKey])
return false;
}
else if(item[objKey].toLowerCase().includes(curQuery[objKey].toLowerCase())) {
console.log('it includes', item[objKey], curQuery[objKey])
return item;
}
})
}
)
console.log('filteredItems', filteredItems )
}
setFilteredItems(curQuery);
期望filteredItems是{
“id”:“3”,
“名称”:“Nexus 5K/2K培训门户”,
“技术”:“数据中心”
},但什么也得不到
我在这里创建了一个快速代码笔:问题是您正在返回
forEach
调用,这只是(类似于continue
)。如果对循环使用常规的,则代码的工作方式与预期相同,因为返回
用于传递给过滤器的函数
:
const数据=[{
“id”:“1”,
“名称”:“统一通信门户”,
“战术技术”:“协作”
}, {
“id”:“2”,
“名称”:“ACE培训门户”,
“tacTechnology”:“网络服务”
}, {
“id”:“3”,
“名称”:“Nexus 5K/2K培训门户”,
“技术”:“数据中心”
}, {
“id”:“4”,
“名称”:“XR培训门户”,
“战术技术”:“路线”
}]
常量curQuery={
名称:“Nex”
}
函数setFilteredItems(curQuery){
const curQueryKeys=Object.keys(curQuery)
常量filteredItems=data.filter((项)=>{
对于(curQueryKeys的const objKey){
if(项[objKey]==未定义| | curQuery[objKey]==空){
log('its not',item[objKey],curQuery[objKey])
返回false;
}else if(项[objKey].toLowerCase().includes(curQuery[objKey].toLowerCase())){
log('it includes',item[objKey],curQuery[objKey])
返回true;
}
}
});
log('filteredItems',filteredItems)
}
setFilteredItems(curQuery)代码>您可以从查询对象中获取键/值,并通过检查对象的值和所需的值来迭代条目
如果不希望查询的所有属性,可以替换为
函数getItems(查询){
var entries=Object.entries(query.map)([k,v])=>[k,v.toLowerCase()];
返回data.filter(o=>entries.every([k,v])=>o[k].toLowerCase().includes(v));
}
常数
数据=[{id:“1”,名称:“统一通信门户”,tacTechnology:“协作”},{id:“2”,名称:“ACE培训门户”,tacTechnology:“网络服务”},{id:“3”,名称:“Nexus 5K/2K培训门户”,tacTechnology:“数据中心”},{id:“4”,名称:“XR培训门户”,tacTechnology:“路由”};
log(getItems({name:'Nex'}))代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}