根据值在两个对象数组之间进行过滤

时间:2020-08-13 15:43:25

标签: javascript

我正在尝试在两个对象数组之间进行过滤:

   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
        ),

但是,每次用户选择一个以上时,它都会清空过滤后的值的内容...

2 个答案:

答案 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);