javascript - 基于字符串数组过滤对象数组 "with partial match"

标签 javascript arrays typescript

我有一个对象数组,想要根据另一个字符串数组的值对其进行过滤,并删除不包含任何字符串的对象。

我尝试对字符串数组使用 split 并在 forEach 中搜索每个术语,但它不起作用,然后尝试了以下方法,它可以作为过滤器,但它会过滤完全匹配而不是部分匹配。

var employees = [
  {"name": "zxc asd", "age":"30"},
  {"name": "asd", "age":"24"},
  {"name": "qwe", "age":"44"},
  {"name": "zxc", "age":"28"},
];

var keepNames = ["asd", "qwe"];

keepNames = keepNames.map(name => {
  return name.toLowerCase();
});


var filteredEmployees = employees.filter(emp => {
  return keepNames.indexOf(emp.name.toLowerCase()) !== -1;
});

console.log( filteredEmployees );

Expected Output[  
  {"name": "zxc asd", "age":"30"},
  {"name": "asd", "age":"24"},
  {"name": "qwe", "age":"44"}];

Actual Output [
  {"name": "asd", "age":"24"},
  {"name": "qwe", "age":"44"}]

我真的很感激任何帮助。 提前致谢

最佳答案

您还需要迭代名称为 keep 的数组并检查值。

var employees = [{ name: "zxc asd", age: "30" }, { name: "asd", age: "24" }, { name: "qwe", age: "44" }, { name: "zxc", age: "28" }],
    keep = ["asd", "qwe"],
    filtered = employees.filter(({ name }) =>
        keep.some(n => name.toLowerCase().includes(n))
    );

console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 基于字符串数组过滤对象数组 "with partial match",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58250401/

相关文章:

jquery - 如何根据 jQuery 中对象数组的比较来更改键值?

javascript - 我在html中的表格列自动增加

ios - 为什么快速枚举比普通迭代更快?

javascript - 更改 anchor 的 href 和目标

javascript - 我有 8 个单行数组,如何将它们组合成一个 8 行的数组?

angular - 未捕获( promise ): Response with status: 401 Unauthorized for URL

angular - 使用 json 响应生成动态列表

javascript - 获取空格之前和之后的符号 (JS)

javascript - 如何从 Javascript/浏览器发送 M-SEARCH

javascript - List.js 搜索列和返回值大于