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

我想根据动态值(名称和部分)过滤下面给出的数组。


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"}];

or

var filterLiterals= ["ABC","A","D"];

所以结果应该是


{

  "name": "ABC",

  "class": "8",

  "section": "A",

},

我很困惑应该遵循哪种方法来获得结果。


我尝试使用 || 和 && 运算符,但无法得到我想要的结果。


任何人都可以建议我采用合适和正确的方法来过滤这个数组。我做不到。


是否可以以任何方式在javascript中以这种方式过滤......?


达令说
浏览 158回答 3
3回答

幕布斯6054654

根据我的理解,我需要在下面找到满足的元素,名称:ABC 部分:A 或 Dvar 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript