我得到了以下代码,它是一个搜索栏,使用二分搜索根据产品的 ID 来搜索产品。当我输入不存在的产品而不是打印出未找到的警报时,它不断在控制台中显示错误,即无法读取未定义的属性长度。
编辑
我只是插入html,错误在js的第8行。
info = [{id:0, title:"notebook", price:12.24}, {id:1, title:"pencil", price:2.75},
{id:2, title:"Ruler", price:12.24}, {id:3, title:"eraser", price:12.24},
{id:4, title:"Crayon", price:2.75}, {id:5, title:"brush", price:12.24},
{id:6, title:"pen", price:2.75}, {id:7, title:"Sketchbook", price:12.24},
{id:8, title:"Case", price:2.75}, {id:9, title:"Mechanical pencil", price:12.24}]
function Searching(key, info) {
var n = info.length;
if (n == 0) return false;
if (n == 1) {
if(key == info[0]["id"]) return true;
return false;
}
var mid = Math.floor(n/2) - 1;
if (key == info[mid]["id"]) {
return true;
}
if (key < info[mid]["id"]) {
Lower = info.slice(0, mid);
return Searching(key, Lower);
}
if (key > info[mid]["id"]) {
upper = info.slice[mid + 1];
return Searching(key, upper);
}
}
function apply() {
var key = input.value;
if (Searching(key, info)) {
p1.innerHTML = "id: " + info[key]["id"] + " title: " + info[key]["title"] + " price: " + info[key]["price"];
} else {
p1.innerHTML = "not found";
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Welcome</h1>
<p>Search bar</p>
<p><input id="input" placeholder="enter "><button type="button" onclick="apply()">search</button></p>
<p1 id="p1"></p1>
<script src="source.js"></script>
</body>
</html>
最佳答案
在 Searching
的最后一个 if 语句中,您没有使用括号来调用切片方法:
if (key > info[mid]["id"]) {
upper = info.slice[mid + 1];
return Searching(key, upper);
将其更改为:
if (key > info[mid]["id"]) {
upper = info.slice(mid + 1);
return Searching(key, upper);
关于javascript - 如何调试 JS 代码中的 "not found"消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61670007/