Как я могу возвратить только объекты в массиве, которые соответствуют определенным критериям с помощью JavaScript?
Например, если я имею ['яблоко', 'авокадо', 'банан', 'вишню'] и хочу только произвести фрукты, которые начинаются с буквы 'A'.
Править:
Взял функцию Sean Kinsey ниже и попытался сделать это более гибким путем передачи в массиве и букве для соответствия:
функционируйте filterABC (прибытие, 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 (прибытие) или filterABC (прибытие, 'A|B|C |') для вывода всех соответствий от до C, но испытывающих затруднений из-за этой части.
Если вы настроили таргетинг на 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());
Если вы хотите, вы можете включить метод фильтра ES5 в ES3, используя
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());