Javascript 如何按多个属性过滤对象数组?

Javascript 如何按多个属性过滤对象数组?,javascript,arrays,Javascript,Arrays,对于这个问题 我自己已经得到了我想要的答案,但是 我的解决方案很长,并且有多个循环 所以我在这里问是因为我想要一个替代的解决方案 我想要的是 我想按3个属性筛选数组。条件是,如果用户填写properties函数,则需要搜索该属性。如果用户将属性留空,我们可以跳过以筛选该属性 下面是我的示例数据 let arrays = [ { id: "29", title: "Race event 2018", s

对于这个问题 我自己已经得到了我想要的答案,但是 我的解决方案很长,并且有多个循环

所以我在这里问是因为我想要一个替代的解决方案

我想要的是 我想按3个属性筛选数组。条件是,如果用户填写properties函数,则需要搜索该属性。如果用户将属性留空,我们可以跳过以筛选该属性

下面是我的示例数据

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