当前位置:  开发笔记 > 编程语言 > 正文

JavaScript对象中的线性搜索

如何解决《JavaScript对象中的线性搜索》经验,为你挑选了1个好方法。

我正在尝试创建一堆JS对象并将它们全部放入一个数组中,以便能够线性搜索每个对象中包含的值.

我很确定在搜索传入的值时嵌套的for循环会出现问题.我正在调查.contains()方法,只使用简单的比较运算符==和===而且没有一个有一直在为我工作.所以我的问题是当我输入我的文本框'times square'时,暂时我只想弹出警告框并在其POI数组中显示包含该目标的对象的名称.

我的HTML下面只是一个简单的文本框和一个提交按钮.有帮助吗?

// scripts

var bmtBroadWayLine = {
      color: 'yellow',
      poi: ["times square", 'south ferry'],
      letters: 'N Q R',
      name: "BMT Broadway Line",
};

var destinations = [];
destinations[1] = bmtBroadWayLine;

function findDestination() {
      for (var i = 0; i < destinations.length; i++) {
            for (var j = 0; j < destinations[i].poi.length; j++) {
                  if (destinations[i].poi[j] == document.getElementById("dest-entry")) {
                        alert(destinations[i].poi[j].name);
                  }
            }
      }
}


      
            
            Routes
      
      

            

Where Do You Want To Go?



1> AlexanderMP..:

这个脚本有很多问题:

您正在将字符串与DOM对象进行比较

您正在尝试访问name字符串的属性

您在基于零的索引语言中使用基于1的索引

不是错误,但仍然:

你没有验证是否为null

你在每次迭代中查找一个DOM项目,这很慢.

您正在将字符串与DOM对象进行比较.

if (destinations[i].poi[j] == document.getElementById("dest-entry")) {
    alert(destinations[i].poi[j].name);
}

相反,将它与该DOM对象内的字符串值进行比较:

if (destinations[i].poi[j] == document.getElementById("dest-entry").value) {
    alert(destinations[i].poi[j].name);
}

可能还想检查NULL一下document.getElementById("dest-entry")

此外,您正在访问的name属性string

alert(destinations[i].poi[j].name);

你可能只想要这个:

alert(destinations[i].name);

也:

destinations[1] = bmtBroadWayLine;

简单地做

destinations.push(bmtBroadWayLine);

当你添加一个索引不是第一个可用的项时,长度增加超过1.所以现在你有1个元素,长度是2,然而第一个元素是未定义的,你试图访问属性undefined.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有