创建数组的JavaScript搜索

创建数组的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";

我是这些论坛的新手,对JavaScript非常陌生。由于我的学校没有提供深入的JavaScript课程,我自己也尝试去理解很多

这可能是一个基本问题,但基本上我想创建两个数组。第一个数组将包含大量的“id”编号。第二个数组将有价格编号。我希望这样,当用户在文本框中输入这些id号时,它将在另一个文本框中输出价格数组号的值

下面是一个使用提示的示例:

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");
}
​
​