使用JavaScript:筛选包含特定元素的列表

3

我有以下对象 -

[
{
 employeeId:1
 employeeName:"ABC"
},
{
 employeeId:2
 employeeName:"ABD"
},
{
 employeeId:3
 employeeName:"FEW"
},
{
 employeeId:4
 employeeName:"JKABL"
},]

我想按照提供的员工姓名过滤此列表。
例如,如果提供了员工姓名单词:AB,则应过滤出 -
[
    {
     employeeId:1
     employeeName:"ABC"
    },
    {
     employeeId:2
     employeeName:"ABD"
    },
    {
     employeeId:4
     employeeName:"JKABL"
    },]

作为一名员工,ID 1、2和4包含AB的员工姓名。
为此,我尝试了 -
object.filter(x=>x.employeeName.indexOf("AB")>-1)

这个代码每次都返回空数组。
我尝试的第二种方法是-
   var filteredObject=object.map(x=>{
 if(x.employeeName.indexOf("AB")>-1)
  return x;
});

每次都返回undefined。


为什么不用正则表达式?这似乎是一个很好的使用案例。 - Joel Hager
2
筛选函数本身并没有问题。你的错误一定来自其他地方。https://jsfiddle.net/4gmjnqfp/1/ - João Paulo Macedo
你在对象中忘记了逗号,也许这就是问题所在? - Oliver Stahl
顺便问一句,你也需要过滤并使用正则表达式吗?如果是用户过滤器,但搜索输入可能会变化,使用正则表达式会有些笨拙。 - somethinghere
2个回答

4
您可以定义一个使用includes过滤的自定义函数:

const data = [
  {
    employeeId: 1,
    employeeName: 'ABC',
  },
  {
    employeeId: 2,
    employeeName: 'ABD',
  },
  {
    employeeId: 3,
    employeeName: 'FEW',
  },
  {
    employeeId: 4,
    employeeName: 'JKABL',
  },
];

const filterName = (search) => {
  return data.filter((value) => value.employeeName.includes(search));
};

console.log(filterName('AB'));


我也这么想,但为什么 .indexOf() > -1 不起作用呢?我的意思是,它可能不太清晰,但我有点困惑为什么它不起作用。 - somethinghere
谢谢你。不过那不是我的数据 :) - somethinghere

1

我尝试了这种方法。

let arr = [
{
 employeeId:1,
 employeeName:"ABC"
},
{
 employeeId:2,
 employeeName:"ABD"
},
{
 employeeId:3,
 employeeName:"FEW"
},
{
 employeeId:4,
 employeeName:"JKABL"
},];

let res = arr.filter((item) => item.employeeName.includes("AB"));
console.log(res);

输出:

[
  { employeeId: 1, employeeName: 'ABC' },
  { employeeId: 2, employeeName: 'ABD' },
  { employeeId: 4, employeeName: 'JKABL' }
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接