Javascript 如何按多个属性过滤对象数组?
对于这个问题 我自己已经得到了我想要的答案,但是 我的解决方案很长,并且有多个循环 所以我在这里问是因为我想要一个替代的解决方案 我想要的是 我想按3个属性筛选数组。条件是,如果用户填写properties函数,则需要搜索该属性。如果用户将属性留空,我们可以跳过以筛选该属性 下面是我的示例数据Javascript 如何按多个属性过滤对象数组?,javascript,arrays,Javascript,Arrays,对于这个问题 我自己已经得到了我想要的答案,但是 我的解决方案很长,并且有多个循环 所以我在这里问是因为我想要一个替代的解决方案 我想要的是 我想按3个属性筛选数组。条件是,如果用户填写properties函数,则需要搜索该属性。如果用户将属性留空,我们可以跳过以筛选该属性 下面是我的示例数据 let arrays = [ { id: "29", title: "Race event 2018", s
let arrays = [
{
id: "29",
title: "Race event 2018",
solutionType: "B2C, B2B, Marketing",
industry: "Retail",
integration: "C5",
},
{
id: "30",
title: "Foundation",
solutionType: "B2C, B2B, CMS, ",
industry: "Distribution",
integration: "D365",
},
{
id: "31",
title: "More disruption",
solutionType: "CMS, Marketing, ",
industry: null,
integration: null,
},
{
id: "36",
title: "Building blocks",
solutionType: "B2C, Marketing, ",
industry: "Distribution",
integration: "C5",
},
{
id: "37",
title: "Delicious icecream",
solutionType: "B2B, CMS, Marketing, ",
industry: "Distribution",
integration: "CRM",
},
];
这里是搜索功能
我想要的是,如果用户不提供搜索属性,我想返回原始数组,如果用户不填写solutionToSearch
我想搜索与industryToSearch
&integrationToSearch
匹配的对象
同时,如果用户未填写行业搜索
,请将其留空
我想搜索那个些。与solutionToSearch
和integrationToSearch
属性匹配,反之为所有3个值匹配
let solutionToSearch = "B2B";
let industryToSearch = " ";
let integrationToSearch = "C5";
const filterTheArrayFunc = () => {
let answerArrayA = [];
let answerArrayB = [];
let answerArrayC = [];
for (let i = 0; i < arrays.length; i++) {
if (solutionToSearch === "" || solutionToSearch === " ") {
answerArrayA = arrays;
} else {
for (let y = 0; y < arrays[i].solutionType.split(",").length; y++) {
if (arrays[i].solutionType.split(",")[y].trim() === solutionToSearch)
answerArrayA.push(arrays[i]);
}
}
}
for (let i = 0; i < answerArrayA.length; i++) {
if (industryToSearch === "" || industryToSearch === " ") {
answerArrayB = answerArrayA;
} else {
if (answerArrayA[i].industry === industryToSearch) {
answerArrayB.push(answerArrayA[i]);
}
}
}
for (let i = 0; i < answerArrayB.length; i++) {
if (integrationToSearch === "" || integrationToSearch === " ") {
answerArrayC = answerArrayB;
} else {
if (answerArrayB[i].integration === integrationToSearch) {
answerArrayC.push(answerArrayB[i]);
}
}
}
console.log(answerArrayC);
};
filterTheArrayFunc();
let solutionToSearch=“B2B”;
让工业搜索“”;
让integrationToSearch=“C5”;
常量filtertherrayfunc=()=>{
让answerArrayA=[];
让我们回答arrayb=[];
让我们回答arrayc=[];
for(设i=0;i
正如你所看到的,我循环了很多次,产生了很多不必要的变量。
我想改进我的代码,请有人帮忙。退房
let数组=[
{
身份证号码:“29”,
标题:“2018年赛马会”,
解决方案类型:“B2C、B2B、营销”,
行业:“零售业”,
集成:“C5”,
},
{
身份证号码:“30”,
标题:“基金会”,
解决方案类型:“B2C、B2B、CMS”,
行业:“分销”,
整合:“D365”,
},
{
id:“31”,
标题:“更多破坏”,
解决方案类型:“CMS,营销,”,
行业:空,
积分:null,
},
{
id:“36”,
标题:“积木”,
解决方案类型:“B2C,营销,”,
行业:“分销”,
集成:“C5”,
},
{
id:“37”,
标题:“美味冰淇淋”,
解决方案类型:“B2B、CMS、营销”,
行业:“分销”,
集成:“CRM”,
},
];
让solutionToSearch=“”;
让工业搜索“”;
让integrationToSearch=“C5”;
常量filtertherrayfunc=()=>{
返回数组.filter(obj=>
(!solutionToSearch.trim()| |(obj.solutionType | | |“”)。包括(solutionToSearch.trim())&&
(!industrySearch.trim()| |(obj.industry | | |“”)。包括(industrySearch.trim())&&
(!integrationToSearch.trim()| |(obj.integration | | |“”)。包括(integrationToSearch.trim())
);
};
var filtered=filterTheArrayFunc();
console.log(过滤)代码>您可以获取与要比较的对象具有相同键作为属性的对象
此解决方案不进行搜索而获取null
或undefined
const
数组=[{id:“29”,标题:“2018年赛事”,解决方案类型:“B2C,B2B,营销”,行业:“零售”,集成:“C5”},{id:“30”,标题:“基础”,解决方案类型:“B2C,B2B,CMS”,行业:“分销”,集成:“D365”},{id:“31”,标题:“更多干扰”,解决方案类型:“CMS,营销”,行业:空,集成:空},{id:“36”,标题:“构建块”,解决方案类型:“B2C,营销”,行业:“分销”,集成:“C5”},{id:“37”,标题:“美味冰淇淋”,解决方案类型:“B2B,CMS,营销”,行业:“分销”,集成:“CRM”},
搜索=对象
.entries({solutionType:“B2B”,行业:,集成:“C5”})
.filter(([,v])=>v&&v.trim()),
result=array.filter(o=>search.every([k,v])=>!o[k]| | o[k]。包括(v));
console.log(结果);
.as控制台包装{最大高度:100%!重要;顶部:0;}
let数组=[
{
身份证号码:“29”,
标题:“2018年赛马会”,
解决方案类型:“B2C、B2B、营销”,
行业:“零售业”,
集成:“C5”,
},
{
身份证号码:“30”,
标题:“基金会”,
解决方案类型:“B2C、B2B、CMS”,
行业:“分销”,
整合:“D365”,
},
{
id:“31”,
标题:“更多破坏”,
解决方案类型:“CMS,营销,”,
行业:空,
积分:null,
},
{
id:“36”,
标题:“积木”,
解决方案类型:“B2C,营销,”,
行业:“分销”,
集成:“C5”,
},
{
id:“37”,
标题:“美味冰淇淋”,
解决方案类型:“B2B、CMS、营销”,
行业:“分销”,
集成:“CRM”,
},
];
常量filterByParams=(arr,params)=>arr.filter(e=>Object