【问题标题】:How to filter list of object in array by element (array) that starts with string如何按以字符串开头的元素(数组)过滤数组中的对象列表
【发布时间】:2020-12-07 12:56:46
【问题描述】:

我有以下对象表:

var search = ["LFBB"];
var data = [
  { id: 1, date: "18-02-2016", valname: ["LFBBR1", "LFFFE5", "LFMBR1", "LFBB5"]  },
  { id: 2, date: "19-02-2016", valname: ["LFFF6", "EESF7", "LFMBR1", "LFGG3"]  },
  { id: 3, date: "14-02-2016", valname: ["LFBBL2", "LFFBC5", "LFMBR1", "LFBB5"]  },
  { id: 4, date: "17-02-2016", valname: ["LEEE5", "LFFFE8", "BGTT5", "LFHT9"]  },
];

var search = "LFBB"

如果“valname”的值与“search”的值匹配,我想过滤数据

如果 search = "LFBB" 过滤器应该返回以下结果:

过滤后的结果:

data = [
             { id: 1, date: "18-02-2016", valname: ["LFBBR1", "LFFFE5", "LFMBR1", "LFBB5"]},
             { id: 3, date: "14-02-2016", valname: ["LFBBL2", "LFFBC5", "LFMBR1", "LFBB5"]}
          ],

我尝试使用

var startsWithN = data.((data) => data.startsWith(source));

但它不起作用

感谢您的帮助

【问题讨论】:

    标签: javascript arrays filter wildcard


    【解决方案1】:

        var search = "LFBB";
        var data = [
          { id: 1, date: "18-02-2016", valname: ["LFBBR1", "LFFFE5", "LFMBR1", "LFBB5"]  },
          { id: 2, date: "19-02-2016", valname: ["LFFF6", "EESF7", "LFMBR1", "LFGG3"]  },
          { id: 3, date: "14-02-2016", valname: ["LFBBL2", "LFFBC5", "LFMBR1", "LFBB5"]  },
          { id: 4, date: "17-02-2016", valname: ["LEEE5", "LFFFE8", "BGTT5", "LFHT9"]  },
        ];
        output=data.filter(x=>x.valname.findIndex(v=>v.startsWith(search))>-1);
        console.log(JSON.stringify(output, null, 4));

    将生成输出

    [
        {
            "id": 1,
            "date": "18-02-2016",
            "valname": [
                "LFBBR1",
                "LFFFE5",
                "LFMBR1",
                "LFBB5"
            ]
        },
        {
            "id": 3,
            "date": "14-02-2016",
            "valname": [
                "LFBBL2",
                "LFFBC5",
                "LFMBR1",
                "LFBB5"
            ]
        }
    ]
    

    【讨论】:

      【解决方案2】:

      您需要迭代valname 并检查是否以所需字符串开头。

      const
          data = [{ id: 1, date: "18-02-2016", valname: ["LFBBR1", "LFFFE5", "LFMBR1", "LFBB5"]  }, { id: 2, date: "19-02-2016", valname: ["LFFF6", "EESF7", "LFMBR1", "LFGG3"]  }, { id: 3, date: "14-02-2016", valname: ["LFBBL2", "LFFBC5", "LFMBR1", "LFBB5"]  }, { id: 4, date: "17-02-2016", valname: ["LEEE5", "LFFFE8", "BGTT5", "LFHT9"]  }],
          search = "LFBB",
          result = data.filter(({ valname }) => valname.some(n => n.startsWith(search)));
          
      console.log(result);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      通过拥有一个搜索值数组,您还需要迭代这个数组。

      const
          data = [{ id: 1, date: "18-02-2016", valname: ["LFBBR1", "LFFFE5", "LFMBR1", "LFBB5"]  }, { id: 2, date: "19-02-2016", valname: ["LFFF6", "EESF7", "LFMBR1", "LFGG3"]  }, { id: 3, date: "14-02-2016", valname: ["LFBBL2", "LFFBC5", "LFMBR1", "LFBB5"]  }, { id: 4, date: "17-02-2016", valname: ["LEEE5", "LFFFE8", "BGTT5", "LFHT9"]  }],
          search = ["LFBB", "LEE"],
          result = data.filter(({ valname }) =>
              valname.some(n =>
                  search.some(s => n.startsWith(s))
              )
          );
          
      console.log(result);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 2019-04-29
        • 2020-03-08
        • 1970-01-01
        • 2021-11-11
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        相关资源
        最近更新 更多