upvoted @Mrbuubuu, но вы можете сделать это в качестве прототипа и пропустить фильтрующий элемент через строку .contains
, чтобы получить больше mootools-ish и обслуживать совпадения в середине, например 'cd', который должен возвращать результаты.
например, case, массив брендов, один из которых the north face
, и пользователь, ищущий north
, должен вернуть соответствующий бренд, но не будет, так как он пропустил the
Кроме того, вам нужно убедиться, что регистр в строке поиска и элементах массива стека уменьшается при сравнении значений.
Вот пример с вводом, который работает: http://jsfiddle.net/dimitar/M2Tep/
(function() {
Array.implement({
subStr: function(what) {
return this.filter(function(el) {
return el.charAt(0) == what;
// return el.contains(what); // any position match
});
}
});
})();
// return the original array elements
console.log(['aba', 'abcd', 'ab', 'da', 'da'].subStr("d"));
// ["da", "da"]
альтернативно, вы упомянули в комментарии, что все, что вы действительно хотели получить, это просто индексы в вашем исходном массиве:
(function() {
Array.implement({
getIndexes: function(what) {
var indexes = [];
this.each(function(el, index) {
if (el.charAt(0) == what)
indexes.push(index);
});
return indexes;
}
});
})();
console.log(['aba', 'abcd', 'ab', 'da', 'da'].getIndexes("d"));
// [3,4]
хотя, поскольку это не возвращает массив, он разрывает цепочку, следовательно, он должен быть не прототипом массива, а просто функцией.