Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-在数组上使用filter和match方法查找精确匹配_Javascript_Arrays - Fatal编程技术网

javascript-在数组上使用filter和match方法查找精确匹配

javascript-在数组上使用filter和match方法查找精确匹配,javascript,arrays,Javascript,Arrays,我使用一个filter函数在一个名为arrayList的数组中查找JSON对象,该数组包含例如: [ { "name": "Markdown", "extension": "(.md)" }, { "name": "MultiMarkdown", "extension": "(.mmd, .txt)" } ] 我使用以下代码搜索“名称”字段,并查找具有特定名称的对象的匹配项: findFormat = (name) => { let format =

我使用一个filter函数在一个名为arrayList的数组中查找JSON对象,该数组包含例如:

[
 {
   "name": "Markdown",
   "extension": "(.md)"
 },
 {
   "name": "MultiMarkdown",
   "extension": "(.mmd, .txt)"
 }
]
我使用以下代码搜索“名称”字段,并查找具有特定名称的对象的匹配项:

findFormat = (name) => {
  let format = arrayList.filter(function (el) {
    let pattern = new RegExp(name);
    return el.name.match(pattern);
  });
  return format.name
}
因此,如果我正在搜索一个名为Markdown的对象,那么这个字符串通过上面函数中的name参数传递,RegExp表达式解析为/Markdown/

对于filter函数本身,我已经实现了以下部分底部描述的polyfill:

对于正则表达式,我没有使用任何像I这样的特殊标志,因为我想找到一个精确匹配的标记。但是,它不断返回,而不是多次降价。我原以为上面的过滤器函数只找到精确匹配,而没有找到子字符串


问题:是否有一种方法可以使用filter和match方法仅过滤精确匹配?上面的polyfill不会返回精确匹配吗?

如果需要精确匹配,请检查是否相等

  let format = arrayList.filter(function (el) {    
    return el.name === name;
  });
或者,如果希望不区分大小写,请规范化大小写:

  let format = arrayList.filter(function (el) {    
    return el.name.toLowerCase() === name.toLowerCase();
  });

这里不需要正则表达式,可能不应该使用它,因为它会变慢。然而,这不是问题所在。问题是新的RegExpname;将创建执行包含搜索的正则表达式。看

我建议换衣服

let pattern = new RegExp(name);
return el.name.match(pattern);


你有一些误解:

正则表达式用于匹配匹配特定模式的字符串。这是一个强大的东西,但我想说,如果你试图找到一个精确的匹配,它不是最好的工具。在这种情况下,您可以只使用严格的相等运算符==。如果确实要使用正则表达式,可以在正则表达式之前添加“^”和“$”以匹配行的第一个和最后一个字符,例如,/^Markdown$/只匹配Markdown Polyfills实现了Javascript标准EcmaScript和Array.prototype.filter中缺失的功能。所有主要浏览器都实现了它,您不需要实现它。 关于如何严格匹配名称,请参见下面的示例

常量数组=[{ 姓名:Markdown,, 扩展名:.md }, { 名称:多重减价, 扩展名:.mmd、.txt } ] 常量标准=‘降价’; const result=array.filteritem=>item.name==条件;
console.log'result',result;没有JSON对象这样的东西。JSON是一种字符串格式。您应该检查.match实际上做了什么。@ScottMarcus
let pattern = new RegExp(name);
return el.name.match(pattern);
return el.name === name;