我需要寻找一个关联数组的值的字符串,但只有字符串实例的开头:搜索数组返回部分匹配
var stack = ['aba', 'abcd', 'ab', 'da', 'da'];
的价值a
在堆栈中的搜索将返回['abc, 'abcd', 'ab']
和为b
将只返回b而“d”的搜索将返回[da', 'da']
...没有办法做到这一点?
我试着做这样的自动完成选择框,但其自定义的,所以我需要moditor文本事件和搜索我的项目的阵列,同时在用户键入获得第一场比赛的索引。
我需要寻找一个关联数组的值的字符串,但只有字符串实例的开头:搜索数组返回部分匹配
var stack = ['aba', 'abcd', 'ab', 'da', 'da'];
的价值a
在堆栈中的搜索将返回['abc, 'abcd', 'ab']
和为b
将只返回b而“d”的搜索将返回[da', 'da']
...没有办法做到这一点?
我试着做这样的自动完成选择框,但其自定义的,所以我需要moditor文本事件和搜索我的项目的阵列,同时在用户键入获得第一场比赛的索引。
upvoted @Mrbuubuu但你可以做到这一点为原型,并通过字符串.contains
通过滤芯更mootools的十岁上下和c在中间匹配,比如'cd',这应该返回结果。
如情况下,琳琅满目的品牌,其中之一是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]
虽然因为这不返回数组,这将打破链,因此它不应该是一个原型阵列,但只是一个函数。
/**
* Extend the Array object
* @param candid The string to search for
* @returns Returns the index of the first match or -1 if not found
*/
Array.prototype.searchFor = function(candid) {
for (var i=0; i<this.length; i++)
if (this[i].indexOf(candid) == 0)
return i;
return -1;
};
然后你可以使用它像:
var index = stack.searchFor('a');
Array.prototype.startWith = function(c){
var result = [];
for(var i=0, len=this.length; i<len; i++){
if(this[i].indexOf(c) == 0){
result.push(this[i]);
}
}
return result || c;
};
如果你想使用的mootools要做到这一点,你可以使用从mootools的过滤方法:
function search(arr, letter) {
var matches = arr.filter(function(str) {
return str.charAt(0) == letter;
});
return (matches.length > 0) ? matches : letter;
}
search(stack, 'd'); //returns ['da', 'da']
在新的浏览器滤波器是内置阵列的方法。 – wildcard 2011-03-26 10:22:46
javascript来实现这一目标最简单的香草是
var stack = ['aba', 'abcd', 'ab', 'da', 'da', undefined, , false, null, 0];
var prefixTextToFind = "a"; //b, c or d
var matches = stack.filter(function(stackValue){
//get rid of all falsely objects
if(stackValue) {
return (stackValue.substring(0, prefixTextToFind.length) === prefixTextToFind);
}
}); //["aba", "abcd", "ab"]
其实我需要返回最匹配的指数 – 2011-03-26 03:57:54
MooTools是罚款以及 – 2011-03-26 04:00:40
这是没有关联数组。你不能通过stack ['aba']'来访问“aba”。 “ab”后面还有一个未封装的字符串。 – 2011-03-26 04:06:25