我正在尝试创建一堆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);
}
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Routes</title>
</head>
<body>
<h1>Where Do You Want To Go?</h1>
<input type="text" id="dest-entry">
<input type="button" value="Send" onclick="findDestination()">
<div id="output"></div>
<script src="scripts.js"></script>
</body>
</html>
答案 0 :(得分:6)
这个脚本有很多问题:
name
属性不是错误,但仍然是:
您正在将字符串与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,然后第一个元素是未定义的,你和& #39;重新尝试访问undefined
的属性。