通过数组过滤并返回具有匹配模式的新数组

时间:2015-04-13 18:51:19

标签: javascript arrays regex

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

所以例如

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"];

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

感谢您阅读!

4 个答案:

答案 0 :(得分:1)

使用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));




答案 1 :(得分:1)

您希望动态创建RegEx

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

工作代码段



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 :(得分:0)

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

http://underscorejs.org/#filter

它会像这样

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

对于数组返回true中的任何值,将包含在使用" filtered"返回的新数组中。值。

还有https://lodash.com/

的Lo-dash库

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

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

答案 3 :(得分:0)

您可以使用jQuery grep:

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

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