【问题标题】:Filtering thru an array and returning a new array with matching pattern通过数组过滤并返回具有匹配模式的新数组
【发布时间】:2015-04-13 18:51:18
【问题描述】:

我正在尝试过滤一个数组并返回一个包含匹配元素的新数组。

例如

var names = ["Kanye, West","Drake, Ross", "Rick, Boss", "Steven, Ross"];

function filterName(arr,pattern){
     //logic here
     return newArr
}

filterName(names,"ss"); //output ["Drake, Ross", "Rick, Boss", "Steven, Ross"];

有人能指出我正确的方向吗?我是否需要正则表达式才能使这样的事情起作用?

感谢您的阅读!

【问题讨论】:

  • 您追求的是动态搜索模式还是仅仅存在子字符串?

标签: javascript arrays regex


【解决方案1】:

您似乎想要动态地创建 RegEx。

您应该创建new RegExp() 对象并将pattern 传递给它,以便我们可以将它与.test() 方法一起使用。

工作代码sn-p:

var names = ["Kanye, West","Drake, Ross", "Rick, Boss", "Steven, Ross"];

function filterName(arr, pattern){
  
  pattern = new RegExp(pattern);  // create a RegExp object with dynamically added pattern
  
  var newArr = [];  // initialize new array for storing results
  
  arr.forEach(function(item){  // parse the array
    if(pattern.test(item))  // if passes the regex test
      newArr.push(item);  // add to result array
  });

  return newArr;
}

// test our function 'filterName'

// test for 'ss'
console.log("Searching for 'ss'");
var result = filterName(names,"ss"); //output ["Drake, Ross", "Rick, Boss", "Steven, Ross"];
console.dir(result);

// test for 'West'
console.log("Searching for 'West'");
var result1 = filterName(names,"West"); //output ["Kanye, West"];
console.dir(result1);

了解更多:

【讨论】:

    【解决方案2】:

    使用 Array.filter 方法 - 它是原生的(现代浏览器),不需要库。

    var names = ["Kanye, West","Drake, Ross", "Rick, Boss", "Steven, Ross"];
    
    function filterName(arr,pattern){
         return arr.filter(function(item) {
             return item.indexOf(pattern) > -1;
         });
    }
    
    var result = filterName(names,"ss"); //output ["Drake, Ross", "Rick, Boss", "Steven, Ross"];
    document.write(JSON.stringify(result));

    【讨论】:

      【解决方案3】:

      你可以使用 jQuery grep:

      https://api.jquery.com/jQuery.grep/

      描述:查找数组中满足过滤函数的元素。原数组不受影响。

      【讨论】:

        【解决方案4】:

        您可以使用 Underscore.js 库。特别是过滤功能。

        http://underscorejs.org/#filter

        会是这样的

        _.filter(myArray, function(names){
            return names.indexOf("somePatternHere") !== -1;
        });
        

        对于数组中返回 true 的任何值,都将包含在与“过滤”值一起返回的新数组中。

        https://lodash.com/ 上还有 Lo-dash 库

        我推荐使用其中一个库(实际上可能是 Lodash)的一个原因是它们针对所使用的浏览器进行了优化。不同的浏览器对本机功能的响应略有不同,如果您想获得最佳结果,使用这两者之一是最佳选择。

        另外,无论如何使用这些都是一个好习惯,因为 JavaScript 缺少许多其他库已经具备的基本功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-26
          • 2021-12-13
          • 2018-09-29
          • 2021-11-21
          • 2018-08-06
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          相关资源
          最近更新 更多