我想知道是否有人能帮我解决这个问题,或者给我指明正确的方向。
在我的项目中,我们有一个需要自动填充的字段,现在我使用onblur,它的效果很神奇,因为它只有在你离开焦点的时候才能做到。但是,由于最近的更改,只有当映射中只有一个唯一项与输入匹配时,它才需要这样做。
我有一个很大的数组,定义如下:
var myArray = [
[content, content],
[content, content],
...
]后来在我的代码中,我将它与一个地图关联起来,至少这是我看到的大多数堆栈溢出问题所引用的内容,如下所示:
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) 上面的代码行是我正在努力弄清楚如何修改的代码。此时,在使用on blur时,如果我输入字母'A‘,并离开焦点区域,它会自动用某个名称填充它。但是,在数组中还有许多以A开头或包含A的其他对象,我如何更改它才能使onkeydown事件继续运行,直到它最终将其过滤为可能的键值对?我尝试查看MDN的过滤文档,但我不认为这能满足我的目的,或者至少我对JS太缺乏经验了。
发布于 2016-09-12 06:41:02
如果第一个和最后一个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 stuffhttps://stackoverflow.com/questions/39441224
复制相似问题