我正在尝试在两个对象数组之间进行过滤:
group: [
{ key: "Global ID", value: "gid" },
{ key: "Super ID", value: "sid" },
{ key: "Duper ID", value: "did" },
{ key: "Application", value: "app" },
{ key: "Category", value: "cat" },
{ key: "Subcategory", value: "sub" },
{ key: "Name", value: "name" },
],
whereClause: [
{ k: "gid", op: "=", v: "111" },
{ k: "sid", op: "=", v: "1" },
{ k: "did", op: "=", v: "2" },
{ k: "app", op: "IN", v: ["asd", "dfg"] },
{ k: "cat", op: "=", v: "hjk" },
{ k: "sub", op: "=", v: "errors" },
{ k: "name", op: "=", v: "mo" },
],
基本思路是-用户从“组” array
中选择多个值,它们存储在“ selectedGroup” array
中,并在按钮上单击,应该有一个过滤器来获取“ whereClause” array
中的对象与“选定” array
-value == k
的内容相匹配。
我尝试过这样过滤它们:
where: this.whereClause.filter(
(clause) => clause.k == this.selectedGroup
),
但是,每次用户选择一个以上时,它都会清空过滤后的值的内容...
答案 0 :(得分:3)
在只有一项的地方:
== this.selectedGroup
或者selectedGroup
是一个数组,因此我们需要搜索其中的项目:
(clause) => this.selectedGroup.some((selectedItem) =>
selectedItem ==clause.k)
答案 1 :(得分:2)
尝试一下。
var group= [
{ key: "Global ID", value: "gid" },
{ key: "Super ID", value: "sid" },
{ key: "Duper ID", value: "did" },
{ key: "Application", value: "app" },
{ key: "Category", value: "cat" },
{ key: "Subcategory", value: "sub" },
{ key: "Name", value: "name" },
];
var whereClause= [
{ k: "gid", op: "=", v: "42501" },
{ k: "sid", op: "=", v: "1" },
{ k: "did", op: "=", v: "2" },
{ k: "app", op: "IN", v: ["hss", "smsc"] },
{ k: "cat", op: "=", v: "lte" },
{ k: "sub", op: "=", v: "errors" },
{ k: "name", op: "=", v: "mo" },
];
var selectedGroup = [
{ key: "Duper ID", value: "did" },
{ key: "Application", value: "app" },
];
var output = this.whereClause.filter((clause) => this.selectedGroup.some((selected) =>
selected.value === clause.k));
console.log(output);