JavaScript - 在用户生成的数组中查找对象

标签 javascript arrays search input

我正在编写的脚本应该相当简单。向用户呈现两个按钮。一种将自己的输入输入到数组中。创建该数组后,它会自动排序。第二个按钮允许用户搜索数组中可能存在或不存在的任何数字。这就是我的问题开始的地方。

应该发生的是,当用户输入他们想要查找的号码时。在数组中搜索该数字。如果该号码存在于该数组中,则会出现一条消息,表明已找到该号码。如果未找到该号码,则会出现一条消息说明该号码。

我觉得问题出在我的搜索函数中的 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>

最佳答案

更新:有两个问题:一是您的函数中未定义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>

关于JavaScript - 在用户生成的数组中查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42404920/

相关文章:

javascript - 从 Javascript 的 3 个类中访问内容值

C# 在 <form runat ="server"> </form> 中有多个客户端表单?

c - 如何在 C 中声明可变大小的数组?

ruby array,从第二个到最后一个获取所有元素

Wordpress,替换标准词/搜索

ruby-on-rails - Rails 3.1 Ransack HABTM

python - 如何根据 python 中另一个数组中的关键字查找数组中的字符串?

php - 在javascript中爆炸新行

JavaScript 混淆 : Objects vs. 数组与对象数组?

c++ - 如何将二维数组传递给函数以及如何调用它