我正在尝试过滤数组并返回一个包含匹配元素的新数组。
所以例如
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"];
有人能指出我正确的方向吗?我是否需要正则表达式才能使这样的东西起作用?
感谢您阅读!
答案 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"返回的新数组中。值。
的Lo-dash库我推荐使用其中一个库(实际上可能是Lodash)的原因是它们根据所使用的浏览器进行了优化。不同的浏览器对本机功能的响应略有不同,如果您希望使用这两种中的一种获得最佳结果,则是最佳选择。
另外,无论如何使用这些都是一个好习惯,因为JavaScript缺少许多其他库已经具备的基本功能。
答案 3 :(得分:0)