JavaScript - 在用户生成的数组中查找对象
2017-02-23
63
我正在编写的脚本应该相当简单。用户会看到两个按钮。一个按钮用于将自己的输入输入到数组中。创建此数组后,它会自动排序。第二个按钮允许用户搜索数组中可能存在或不存在的任何数字。这就是我的问题开始的地方。
应该发生的是,当用户输入他们想要查找的数字时。在数组中搜索该数字。如果该数字存在于该数组中,则会出现一条消息,提示已找到该数字。如果未找到该数字,则会出现一条消息,说明已找到该数字。
我觉得问题出在我的搜索函数中的 for 循环上。不幸的是,我还没有找到自己的解决方案。当我在代码片段提交中运行我的代码时,我收到以下错误。
{
"message": "Uncaught TypeError: Cannot read property 'length' of undefined",
"filename": "http://stacksnippets.net/js",
"lineno": 65,
"colno": 16
}
已插入最新版本的脚本以供参考。任何帮助都值得赞赏,并提前致谢。
/* Array Function */
function arrayFunction() {
var arr = [];
for (var i = 0; i < 5; i++)
arr.push(prompt("Enter a number"));
bubbleSort(arr);
console.log(arr);
arr.toString();
window.confirm("Your sorted array is: " + arr).innerHTML = arr;
}
/* Sort Function */
function bubbleSort(arr) {
var swapped;
do {
swapped = false;
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
/* Search Function */
function numSearch(arr) {
var x = window.prompt("Search for a number.");
for (var i = 0; i < arr.length; i++); {
if (arr[i] == x) {
return window.confirm("It's here.");
}
}
return window.confirm("It is not here.")
}
<html>
<head>
</head>
<body>
<script language="JavaScript">
</script>
<button type="button" onclick="arrayFunction()">Create Array</button>
<button type="button" onclick="numSearch()">Search Array</button>
</body>
</html>
3个回答
更新
:有两个问题:一是
arr
未在您的函数中定义。另一个是您的
numSearch
for
循环后面直接有一个分号,导致它提前终止并且永远不会迭代您的结果。另外,我建议将字符串解析为数字并使用严格相等,如本例所示。
此外,您可以通过从冒泡排序切换到合并排序,将算法的效率从
O(N^2)
降低到
O(N log N)
。
以下代码片段有效:
/* Array Function */
let arr = [];
function arrayFunction() {
arr = [];
for (let i = 0; i < 5; i++) {
arr.push(parseInt(prompt("Enter a number")));
}
bubbleSort();
console.log(arr);
arr.toString();
window.confirm("Your sorted array is: " + arr).innerHTML = arr;
}
/* Sort Function */
function bubbleSort() {
var swapped;
do {
swapped = false;
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
/* Search Function */
function numSearch() {
var x = parseInt(window.prompt("Search for a number."));
for (let i = 0; i < arr.length; i++) {
if (arr[i] === x) {
return window.confirm("It's here.");
}
}
return window.confirm("It is not here.")
}
<html>
<head></head>
<body>
<button type="button" onclick="arrayFunction()">Create Array</button>
<button type="button" onclick="numSearch()">Search Array</button>
</body>
</html>
cchamberlain
2017-02-23
这是因为
arr
是在函数
arrayFunction
内部定义的,因此只能在其范围内访问。如果您希望能够在其他函数(例如
numSearch
)中访问它,则必须将其设为全局函数。将其声明为参数并调用没有参数的函数不会解决问题。尝试此结构:
var arr = []; // arr is gloabal now it can be accessed by all other functions bellow it
function arrayFunction() {
//var arr = []; // remove this line
// ...
}
function bubbleSort(arr) {
// ...
}
function numSearch(arr) {
// ...
}
ibrahim mahrir
2017-02-23
有两个问题。
第一个问题是,arr 正在被创建,但是一旦函数运行完毕,它就会被销毁。
第二个问题是,在 for 和括号
{
之间有一个分号
;
。
/* Array Function */
var main_array = []; // <-------------------------------------add this.
function arrayFunction() {
var arr = [];
for (var i = 0; i < 5; i++)
arr.push(prompt("Enter a number"));
bubbleSort(arr);
console.log(arr);
arr.toString();
window.confirm("Your sorted array is: " + arr).innerHTML = arr;
main_array = arr; // <-------------------------------------add this.
}
/* Sort Function */
function bubbleSort(arr) {
var swapped;
do {
swapped = false;
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
/* Search Function */
function numSearch() { // <------------------------------------remove `arr`
var x = window.prompt("Search for a number.");
var arr = main_array; // <-----------------------------------add this.
for (var i = 0; i < arr.length; i++) { // <------------------remove semicolon.
if (arr[i] == x) {
return window.confirm("It's here.");
}
}
return window.confirm("It is not here.")
}
<html>
<head>
</head>
<body>
<script language="JavaScript">
</script>
<button type="button" onclick="arrayFunction()">Create Array</button>
<button type="button" onclick="numSearch()">Search Array</button>
</body>
</html>
ToMakPo
2017-02-23