我正在尝试创建一堆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?
这个脚本有很多问题:
您正在将字符串与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
.