创建数组的JavaScript搜索
我是这些论坛的新手,对JavaScript非常陌生。由于我的学校没有提供深入的JavaScript课程,我自己也尝试去理解很多 这可能是一个基本问题,但基本上我想创建两个数组。第一个数组将包含大量的“id”编号。第二个数组将有价格编号。我希望这样,当用户在文本框中输入这些id号时,它将在另一个文本框中输出价格数组号的值 下面是一个使用提示的示例:创建数组的JavaScript搜索,javascript,arrays,search,text,Javascript,Arrays,Search,Text,我是这些论坛的新手,对JavaScript非常陌生。由于我的学校没有提供深入的JavaScript课程,我自己也尝试去理解很多 这可能是一个基本问题,但基本上我想创建两个数组。第一个数组将包含大量的“id”编号。第二个数组将有价格编号。我希望这样,当用户在文本框中输入这些id号时,它将在另一个文本框中输出价格数组号的值 下面是一个使用提示的示例: noArray = new Array(3); noArray[1]="03"; noArray[2]="12"; noArray[3]="15";
noArray = new Array(3);
noArray[1]="03";
noArray[2]="12";
noArray[3]="15";
nameArray = new Array(3);
nameArray[1] = "$45";
nameArray[2] = "$300";
nameArray[3] = "$900";
var userNumIn=prompt("Enter the item number you want to retrieve","");
var itemSub=1;
var matchInd= false;
while (itemSub <= 3 && matchInd == false){
if (noArray[itemSub] == userNumIn){
matchInd = true;
} else {
itemSub++ ;
}
}
if (matchInd == true){
document.write("The item costs " + nameArray[itemSub]);
} else {
document.write("Invalid item number");
}
noArray=新阵列(3);
诺瑞[1]=“03”;
诺瑞[2]=“12”;
诺瑞[3]=“15”;
nameArray=新数组(3);
nameArray[1]=“45美元”;
nameArray[2]=“300美元”;
nameArray[3]=“900美元”;
var userNumIn=prompt(“输入要检索的项目编号”,”;
var-itemSub=1;
var matchInd=false;
虽然(itemSub清理了代码,但不要指望用户将来会这样做
2dArray = new Array(3)(2)
2dArray[0][0] = "03";
2dArray[0][1] = "$45";
2dArray[1][0] = "12";
2dArray[1][1] = "$300";
2dArray[2][0] = "15";
2dArray[2][1] = "$900";
var userNumIn=prompt("Enter the item number you want to retrieve","");
var matchInd = false;
for(var i = 0; i < 3 && !matchInd; i++){
if (2dArray[i][0] == userNumIn){
matchInd = true;
document.getElementById('yourTextBoxId').value = 2dArray[i][1];
}
}
if(!matchInd) {
document.getElementById('yourTextBoxId').value = "Invalid item number";
}
2dArray=新数组(3)(2)
2dArray[0][0]=“03”;
2dArray[0][1]=“45美元”;
2dArray[1][0]=“12”;
2dArray[1][1]=“300美元”;
2dArray[2][0]=“15”;
2dArray[2][1]=“900美元”;
var userNumIn=prompt(“输入要检索的项目编号”,”;
var matchInd=false;
对于(变量i=0;i<3&!matchInd;i++){
if(2dArray[i][0]==userNumIn){
matchInd=true;
document.getElementById('yourTextBoxId')。value=2dArray[i][1];
}
}
如果(!matchInd){
document.getElementById('yourTextBoxId')。value=“无效的项目编号”;
}
我只需要一次javascript刷新^^没有测试,希望它能工作。如果有什么不清楚的地方,请询问。您应该了解对象
基本上,对象是字符串和某个值之间的映射,这似乎是您想要的。如果使用对象,代码会简单得多。看看您如何不需要使用任何类型的循环或任何辅助变量
var prices = {
"03": "$45",
"12": "$300",
"15": "$900"
};
var id = prompt("Enter the item number you want to retrieve","");
if(id in prices) {
alert("The item costs " + prices[id]);
}
else {
alert("Invalid item number");
}
您特别询问了如何使用文本框和按钮,因此我创建了一个示例页面,介绍了如何使用文本框和按钮
ID: <input id="input" type="text"/><br>
<button id="submit">Get Price</button><br>
Price: <output id="output"/>
而且您的方法是合理的,一旦您结合了dbaupp提到的内容,它就会起作用。下面是一种更高级但更干净的方法:
在JavaScript中,您可以自由创建任意形状的对象。因此,您可以定义同时包含商品编号和价格的对象。例如:
var item = {
number: '03',
price: '$45'
};
现在item是一个对象,包含关于item number 03的两个内容:
alert(item.number); // alerts 03
alert(item.price); // alerts $45
您可以将对象粘贴到数组中,因此最好使用一个数组来包含所需的所有内容,而不是两个数组
var itemArray = new Array(3);
// note the first index in array is 0, not 1
itemArray[0] = {
number: '03',
price: '$45'
};
itemArray[1] = {
number: '12',
price: '$300'
};
itemArray[2] = {
number: '15',
price: '$900'
};
现在更容易找到用户想要的项目:
var userNumIn = prompt("Enter the item number you want to retrieve","");
for(var i = 0; i < itemArray.length; ++i) {
var item = itemArray[i];
if(item.number === userNumberIn) {
alert("The item costs " + item.price);
}
}
var userNumIn=prompt(“输入要检索的项目编号,”);
对于(变量i=0;i
还有很多方法可以改进。我故意只引入对象来保持更改的简单。您可以尝试使用Javascript对象作为哈希表来简化逻辑
Javascript中的对象可以用作哈希表,因此,当执行查找时,运行时将是O(1),而不是通过数组循环,数组是O(n)
jsiddle:document.write()
功能是一种坏习惯。数组索引从0开始,因此noArray
看起来像[,“03”,“12”,“15”]
(对于名称数组也类似):您应该分配给noArray[0]
,noArray[1]
,noArray[2]
。另外,Javascript有,您应该使用它来代替“Y”
和“N”
。非常感谢@Matt Greer。了解对象以及人们对“真或假”布尔JS值的建议将使事情在未来变得更容易!哈希标记,我以前听说过,但从来没有真正知道它们是什么。这真的让事情变得更容易了。看来我还有很多东西要学!谢谢!@Brian-这是它实际上是hashtable/hashmap。这里有一篇Wiki文章可以解释更多…如果你需要做大量的查找,它是一个非常有用的数据结构!我对你的代码有一个问题。你在可变价格中使用了in参数。这到底是如何工作的?非常感谢你制作了一个工作示例。非常有用。
Brian>只是检查对象是否包含特定属性的Javascript关键字。
var userNumIn = prompt("Enter the item number you want to retrieve","");
for(var i = 0; i < itemArray.length; ++i) {
var item = itemArray[i];
if(item.number === userNumberIn) {
alert("The item costs " + item.price);
}
}
// Restructure the array so it's in a very simple
// 'hashtable' - Key: id, value: price.
// Lookup time on this is O(1)
var priceLookup = {
"03" : "$45", // I assume the 0 is important
"12" : "$300",
"15" : "$900"
};
// Get data from user
var id = prompt('Enter item ID');
// Check if item exists in the price lookup
if (priceLookup[id]) {
// Alert user with price
document.write("The item costs " + priceLookup[id]);
}
else {
// ID is invalid in this case.
document.write("Invalid item number");
}