0

我是这些论坛的新手,对 JavaScript 也很陌生。由于我的学校不提供深入的 JavaScript 课程,我试图自己理解其中的很多内容。

这可能是一个基本问题,但基本上我想创建 2 个数组。第一个数组将有许多“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");
}

问题是我如何将某人在“id”文本框中输入的值与 id 数组进行比较,然后如果该值匹配,让它检查价格数组中该 id 的价格,然后输出到“价格” ' 文本框?我希望你明白我的意思。

4

4 回答 4

2

你应该了解对象。

基本上,对象是字符串和某个值之间的映射,这似乎是您想要的。如果您使用对象,您的代码会简单得多。看看你如何不需要使用任何类型的循环或任何辅助变量。

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

您可以在 jsFiddle 上看到这一点

您特别询问了如何使用文本框和按钮,因此我创建了一个示例页面来说明如何做到这一点。首先,您需要一个 HTML 表单

ID: <input id="input" type="text"/><br>
<button id="submit">Get Price</button><br>
Price: <output id="output"/>

然后你只需稍微修改上面的 Javascript 以使表单工作

var prices = {
    "03": "$45",
    "12": "$300",
    "15": "$900"
};

document.getElementById("submit").onclick = function() {
    var id = document.getElementById("input").value;
    var price = id in prices ? prices[id] : "Invalid ID";
    document.getElementById("output").innerHTML = price;
};

可以看到这一点。

于 2012-04-12T01:05:02.703 回答
0

清理代码,但不要指望用户将来会这样做......

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

我只需要一个javascript刷新^^没有测试,希望它有效。如果有任何不清楚的地方,请询问。

于 2012-04-12T01:02:15.867 回答
0

你的方法是合理的,一旦你合并了 dbaupp 提到的东西,它就会起作用。这是一种更高级但更清洁的方法:

在 JavaScript 中,您可以自由地创建具有您想要的任何形状的对象。因此,您可以定义同时包含商品编号和价格的对象。例如:

var item = {
    number: '03',
    price: '$45'
};

现在 item 是一个对象,包含关于项目编号 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);
    }
}

仍有很多方法可以改进这一点。我故意只引入对象以保持更改简单。

于 2012-04-12T01:06:20.703 回答
0

您可以尝试使用 Javascript 对象作为哈希表来简化逻辑。

Javascript 中的对象可以用作哈希表,因此,当您执行查找时,运行时间将为 O(1),而不是遍历数组,即 O(n)。

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

JSFiddle:http: //jsfiddle.net/C4RLV/

于 2012-04-12T01:12:24.830 回答