繁体   English   中英

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

[英]how to filter an array based on dynamic values in 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中以这种方式过滤......?

您可以创建一个接受名称和部分数组的函数。 在函数内部使用filter并在回调函数中返回名称匹配且该section包含在传递给该函数的部分数组中的那些对象

 var allResponse = [{ "name": "ABC", "class": "8", "section": "A", }, { "name": "DEF", "class": "7", "section": "B", }, { "name": "ABC", "class": "8", "section": "D", } ] function filterArray(name, sectionArray) { return allResponse.filter(function(elem) { return elem.name = name && sectionArray.includes(elem.section) }) }; console.log(filterArray('ABC', ['A', 'D']))

如果我正确阅读了您的问题,您希望根据您点击的内容过滤您的数据。

 var allResponse = [ { "name": "ABC", "class": "8", "section": "A", }, { "name": "DEF", "class": "7", "section": "B", }, { "name": "ABC", "class": "8", "section": "D", }, ]; var clickedValue = "ABC"; var filteredResponse = allResponse.filter( function(response) { return response.name === clickedValue }); console.log(filteredResponse);

我认为这应该可以解决您的过滤问题。

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

名称: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);

运行这个!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM