我想知道是否有人可以帮助我解决这个问题或者指出我朝着正确的方向前进。
在我的项目中,我们有一个需要自动填充的文件,此时我使用的onblur可以创造奇迹,因为只有这样才能离开焦点。但是,由于最近的更改,它只需要在地图中只有一个与输入匹配的唯一项目时才这样做。
我有一个大型数组定义如下:
var myArray = [
[content, content],
[content, content],
...
]
稍后在我的代码中我将它与地图相关联,至少这是我所看到的大多数stackoverflow问题,如下所示:
var myMap = {};
for(0 to myArray.length) {
var a = myArray[i][0];
var b = myArray[i][1];
myMap[a] = b;
}
现在,最后我按如下方式迭代这个数组:
for (var key in map) {
if (map.hasOwnProperty(key)) {
if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0)
以上是我正在努力弄清楚如何改变的代码行。此时,在使用模糊时,如果我输入字母'A',并离开焦点区域,它将自动用某个名称填充它。但是,在数组中有许多其他对象以A开头或包含A.如何更改它以便onkeydown事件将一直持续到最终将其过滤到只有可能的键值对?我试着查看MDN的文档进行过滤,但我认为这不适用于我的目的,或者至少我对JS缺乏经验。
答案 0 :(得分:0)
如果indexOf的第一个和最后一个是非负且相等的,那么只有一个。你可以用&&和和布尔短路评估,但这将在屏幕上运行很远,所以我用一个嵌套的if显示你的代码(由你来添加块的结尾)。但我们还需要查看多个键上是否存在匹配。
var matchCount=0;
for (var key in map) {
if (map.hasOwnProperty(key)) {
if (map[key].toLowerCase().indexOf(location.toLowerCase()) >= 0){
if (map[key].toLowerCase().indexOf(location.toLowerCase()) == map[key].toLowerCase().lastIndexOf(location.toLowerCase())) {
matchCount++;
然后在你的for循环之外:
if (matchCount==1){ //do your stuff