【问题标题】:Using wildcards while using JavaScript filter function在使用 JavaScript 过滤功能时使用通配符
【发布时间】:2016-11-10 03:21:02
【问题描述】:

我有一个需要在其中进行通配符过滤的对象数组。 例如,我的对象可能包含如下内容:

var a = [  
   {  
      "type":"metals",
      "SN":"SN0000000000"

   },
   {  
      "type":"wood",
      "SN":"SN0000000001"
   }
];

我的正常标准过滤功能是这样的:

  var filtered = a.filter(function(el) {
      //normal checkbox criteria filter for selectedtype
      if(!(self.serialno)){
        return el.type == self.selectedType
      }
      //wildcard text filtering from textfield
      else{
       return typeof el.SN == self.serialno;
      }
    });

打印出来的结果是这样的:

console.log(filtered);

对于我使用复选框标准选择的普通标准过滤器(“类型”),我可以取回我选择的标准类型(作为对象数组),但在“SN”的情况下它调用基于文本的通配符搜索,我无法这样做。

例如,如果我要在通配符文本字段中键入“00”,该函数应该返回一个对象数组,其中“SN/serialNo”包含“00”(在上面的例子,var a 中的两个对象)。

PS:

self.serialno 是从文本框中检索到的字符串。

el.SN 是过滤函数返回的对象数组。

更新:

运行此代码:

console.log(self.serialno.test(el.SN));

返回我:

【问题讨论】:

  • typeof el.SN 将返回el.SN 的类型,即字符串"string"。这可能不是你想要的?如果不发布相关代码,这个问题可能无法回答。
  • 尝试使用正则表达式,如return self.serialno.test(el.SN);
  • @AndyRay 您需要什么相关代码?我需要的是返回我使用通配符搜索的对象结果。

标签: javascript json wildcard


【解决方案1】:

据我从您的问题中了解到,您el.SN 是一个字符串,表示一组符合正则表达式的序列号。 如果是这样,您可以使用test 函数,该函数旨在针对作为参数传递的正则表达式测试调用字符串。

  var patt = new RegExp(self.serialno);
  if(patt.test(el.SN)){ return el; }

如果self.serialno与正则表达式el.SN匹配则返回真

您说el.SN 是javascript 过滤功能的结果。但是我认为filtered 变量包含该函数的结果。

el.SN 是传递给用于过滤数组a 的函数的参数 (el) 的属性。

【讨论】:

  • self.serialno 是我从文本框本身提取的字符串。 el.SN 是 javascript 过滤函数的结果。因此我无法使用 self.serialno.test
  • 请检查我的回答中的更新。非常感谢您抽出宝贵时间。
  • 嗨,我设法解决了。需要删除“var patt = new RegExp(self.serialno);”并使用 .test 方法返回 el 。您可能想更改您的代码,以便我可以将您的答案标记为正确。 (:
  • 你的意思是这样的?
  • 我的意思是:if(patt.test(el.SN)){ return el; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2015-08-28
  • 2021-11-12
  • 2021-09-03
相关资源
最近更新 更多