0

私はこれらのフォーラムは初めてで、JavaScript もまったく初めてです。私の学校では JavaScript の詳細なコースを提供していないため、多くのことを自分で理解しようとしました。

これは基本的な質問かもしれませんが、基本的には 2 つの配列を作成したいと考えています。最初の配列には、多数の「id」番号が含まれます。2 番目の配列には価格番号が含まれます。ユーザーがテキスト ボックスにこれらの 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

あなたのアプローチは健全であり、dbauppが言及していることを取り入れれば機能します。これを行うためのより高度でクリーンな方法は次のとおりです。

JavaScriptでは、任意の形状のオブジェクトを自由に作成できます。したがって、アイテムの番号と価格の両方を含むオブジェクトを定義できます。例えば:

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

これで、itemはアイテム番号03に関する両方を含むオブジェクトになります。

alert(item.number); // alerts 03
alert(item.price);  // alerts $45

オブジェクトを配列に貼り付けることができるため、2つの配列ではなく、必要なものすべてを含む1つの配列を使用することをお勧めします。

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(n) である配列をループする代わりに O(1) になります。

// 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 に答える
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 に答える