如何使用javascript仅返回符合特定条件的数组中的对象?
例如,如果我有['apple','avocado','banana','cherry']并且只想输出以字母'A'开头的水果。
编辑:
接下来Sean Kinsey的功能,并尝试通过传入数组和字母来使其更灵活:
function filterABC(arr,abc){
var arr = arr;
var filtered = (function(){
var filtered = [], i = arr.length;
while (i--) {
if ('/^' + abc + '/'.test(arr[i])) {
filtered.push(arr[i]);
}
}
return filtered;
})();
return filtered.join();
}
尝试使用filterABC(arr,'A')或filterABC(arr,'A | B | C |')调用它来输出从A到C的所有匹配但是这部分有问题。
答案 0 :(得分:14)
如果定位ES3(最常见且安全使用的javascript版本),请使用
var arr = ['apple','avocado','banana','cherry'];
var filtered = (function(){
var filtered = [], i = arr.length;
while (i--) {
if (/^A/.test(arr[i])) {
filtered.push(arr[i]);
}
}
return filtered;
})();
alert(filtered.join());
但如果你的目标是ES5,那么你可以使用
来实现var filtered = arr.filter(function(item){
return /^A/.test(item);
});
alert(filtered.join());
如果您愿意,可以使用
在ES3中包含ES5过滤方法if (!Array.prototype.filter) {
Array.prototype.filter = function(fun /*, thisp*/){
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in this) {
var val = this[i]; // in case fun mutates this
if (fun.call(thisp, val, i, this))
res.push(val);
}
}
return res;
};
}
有关详情,请参阅https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/Array/filter#Compatibility。
<强>更新强> 回答更新的问题
var filtered = (function(pattern){
var filtered = [], i = arr.length, re = new RegExp('^' + pattern);
while (i--) {
if (re.test(arr[i])) {
filtered.push(arr[i]);
}
}
return filtered;
})('A'); // A is the pattern
alert(filtered.join());
答案 1 :(得分:0)
您的问题在于动态生成正则表达式。您不能通过连接字符串来生成有效的正则表达式。您必须使用构造函数:RegExp()从字符串生成正则表达式。
这是我匹配数组的函数:
function matcharray(regexp, array) {
var filtered = [];
for (i = 0; i < array.length; i++) {
if (regexp.test(array[i])) {
filtered.push(array[i]);
}
}
return filtered;
}
您可以像这样调用此函数:
var myregex = "abc";
alert(matcharray(new RegExp(myregex), my_array).join());