Javascript 在对象数组中搜索字符串,如

Javascript 在对象数组中搜索字符串,如,javascript,typescript,Javascript,Typescript,我用typescript编写了这段代码,用于搜索对象列表中严格不相等的对象: list = list.filter( x => (x.surname + ' ' + x.name) .trim() .toLowerCase() .search(filter.toLowerCase()) >= 0); 因此,如果我想搜索Alex并只键入al,Alex将显示为有效结果 当我在javascript代码库中移动这段代码时,它完

我用typescript编写了这段代码,用于搜索对象列表中严格不相等的对象:

list = list.filter(
  x => (x.surname + ' ' + x.name)
          .trim()
          .toLowerCase()
          .search(filter.toLowerCase()) >= 0);
因此,如果我想搜索Alex并只键入
al
Alex
将显示为有效结果

当我在javascript代码库中移动这段代码时,它完全被破坏了,搜索错误,trim()等等


有一种方法可以实现这个结果,而不必在循环上写循环?

假设我正确地阅读了这个问题,您有一个如下的对象数组:

const people = [
  { name: 'Dave', surname: 'Smith' },
  { name: 'Stevie', surname: 'Wonder' },
  { name: 'Alex', surname: 'Winter' }
];
您想在列表中搜索与特定字符串部分匹配的人(称之为
searchString
)?这应该做到:

const result = people.find(
  person => {
    const name = person.name.toLowerCase();
    const surname = person.surname.toLowerCase();

    if (`${name}${surname}.includes(searchString.toLowerCase()) {
      return person;
    }
  }
);
这可以被包装成一行;在这么一个片段中,它看起来有点笨拙,但它是:

const result = people.find(person => `${person.name.toLowerCase()}${person.surname.toLowerCase()}`.includes(searchString.toLowerCase()));
如果要返回所有匹配结果的数组,请将
find
替换为
filter

const result = people.filter(person => `${person.name.toLowerCase()}${person.surname.toLowerCase()}`.includes(searchString.toLowerCase()));

您的代码看起来不错,它适用于您描述的情况,除了

还请注意,这将从传递给它的字符串创建一个正则表达式,如果传递一个简单句点
,可能会产生意外的结果;如果你不想那样,那你最好用

以下是两种方法的演示:

函数查找搜索(列表、过滤器){
返回列表.filter(
x=>(x.姓氏+“”+x.姓名)
.trim()
.toLowerCase()
.search(filter.toLowerCase())>=0);
}
函数findUsingIndexOf(列表、过滤器){
返回列表.filter(
x=>(x.姓氏+“”+x.姓名)
.trim()
.toLowerCase()
.indexOf(filter.toLowerCase())>=0);
}
var data=[{姓氏:'Alex',姓名:'Foo'},{姓氏:'Oleg',姓名:'Bar'}];
console.log('***findusinsearch:')
log(findusinsearch(数据'al'));
log(findusinsearch(data,'ol'));
log(findusinsearch(数据'ul'));
日志(findUsingSearch(数据“.”);
console.log(“***findUsingIndexOf:”)
log(findUsingIndexOf(数据'al'));
log(findUsingIndexOf(数据'ol'));
日志(findUsingIndexOf(数据'ul'));

日志(FindSingIndexof(数据“.”)查看用于javascripti的regex我想避免regex为什么要避免它?不是每个人都想使用regex Voodoogin在一个带有名称和姓氏道具的对象数组示例中,显示的代码按预期工作。所以我们需要更多的信息。有很多事情可能是错误的:例如,您正在IE11中进行测试,或者使用不识别箭头的其他浏览器<代码>列表
是一个常量,无法重新分配<代码>列表不是数组<代码>过滤器未声明或不是字符串。您正在运行的生成系统将此代码更改为无效代码。这么多的可能性。寻找一个人还是任何人
find()
将只返回第一个匹配项。我没有从问题中去掉这一点,但您当然是正确的。我将添加一个编辑。