javascript - 如何根据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中以这种方式过滤......?
解决方案
据我了解,我需要在下面找到令人满意的元素,
名称: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);
运行这个!
推荐阅读
- c - C - 矩阵乘法 - 使用最大可分配 RAM 大小
- react-native - 如何在本机反应中制作可搜索的下拉列表以打开特定屏幕?
- c++ - 如何在 C++ 中将字节数组转换回 jpeg
- javascript - 如何获取当前机器人状态?
- python - 如何在 Python 中从多个远程服务器读取多个文件?
- sql - 可以在同一查询中查询多个键中的数据吗?
- python - 在 numpy 中保留 1 索引的最佳方法
- r - 如何绘制第二个系数(不包括绘图中的截距)我可以选择使用 abline 绘制哪个系数?
- php - PHP:如何将数组作为函数参数传播
- laravel - 如何在带有关系表的帖子中显示评论的用户名