![](/img/trans.png)
[英]How to filter array of object based on another array values using 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.