为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据javascript中的动态值过滤数组

如何根据javascript中的动态值过滤数组

达令说 2021-08-20 17:04:23
我想根据动态值(名称和部分)过滤下面给出的数组。var allResponse = [{  "name": "ABC",  "class": "8",  "section": "A",},{  "name": "DEF",  "class": "7",  "section": "B",},{  "name": "ABC",  "class": "8",  "section": "D",},]name 和 section 的这些值,我正在单击复选框。基于这些值,我想过滤这个给定的数组allResponse。值可以是多个,例如:过滤名称为 ABC 且部分为 A 和 D的数组,就像在获得价值之后,我尝试创建一个对象来过滤,如下面给出的那样进行迭代过滤。但是做不到var filterLiterals= [{"name": "ABC"},{"section": "A"},{"section": "D"}];orvar filterLiterals= ["ABC","A","D"];所以结果应该是{  "name": "ABC",  "class": "8",  "section": "A",},我很困惑应该遵循哪种方法来获得结果。我尝试使用 || 和 && 运算符,但无法得到我想要的结果。任何人都可以建议我采用合适和正确的方法来过滤这个数组。我做不到。是否可以以任何方式在javascript中以这种方式过滤......?
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

根据我的理解,我需要在下面找到满足的元素,


名称:ABC 部分:A 或 D


var allResponse = [

    {

        "name": "ABC",

        "class": "8",

        "section": "A",

    },

    {

        "name": "DEF",

        "class": "7",

        "section": "B",

    },

    {

        "name": "ABC",

        "class": "8",

        "section": "D",

    },  

];


var filterLiterals = [

    {"name": "ABC"},

    {"section": "A"},

    {"section": "D"}

];


const parsed = filterLiterals.reduce((acc, obj) => {

    const key = Object.keys(obj)[0];

    if (typeof acc[key] === 'undefined')

        acc[key] = [obj[key]];

    else 

        acc[key].push(obj[key]);

    return acc;

}, {});


//console.log("parsed: ", parsed);


var answer = allResponse.filter(obj => {

    let flag = true;

    for (const key of Object.keys(parsed)) {

        if (!parsed[key].includes(obj[key])) {

            flag = false;

            break;

        }

    }

    return flag;

});


console.log(answer);


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信