2

2つの配列があります。1つは国の名前で、もう1つは通貨タイプです。これらをマージして、通貨配列の代わりに国キーを使用したいと思います。これを達成するための最良の方法は何でしょうか?

これは私のコードが今どのように見えるかです:

var country = new Array();
country["SEK"] = 'Sweden';
country["USD"] = 'United states';
var currencies = ["SEK","USD"];
var options = '';

for (var i = 0; i < currencies.length; i++) {
    options += '<option value="' + currencies[i] + '" id="' + currencies[i] + '">' + currencies[i] + ' (' + country[currencies[i]] + ')</option>';
}
4

3 に答える 3

3

これを使用できるというのはよくある誤解です。

for (var currency in country) {
  result += { ... something done with both currency and country[currency] ... };
}

ここでの落とし穴は、ハッシュがJSで技術的に順序付けされていないため、これらのオプションの同じ順序を保証できないことです。

一般的な代替手段は、代わりにオブジェクトの配列を使用することです。

var countriesData = [
{
  country: 'Sweden',
  currency: 'SEK'
},
{
  country: 'United States',
  currency: 'USD'
}
];
for (var i = 0, l = countriesData.length; i < l; i++) {
  result += { something of countriesData[i].currency and countriesData[i].country };
}


補足として、これを考慮してください...

var country = new Array();
country["SEK"] = 'Sweden';
country["USD"] = 'United states';
console.log(country.length); // wait, what?

...そして0がログに記録されますが、2ではありません-おそらく予想どおりです。繰り返しになりますが、JSには「PHPのような連想配列」のようなものはありません。オブジェクトと配列があります(技術的にはオブジェクトでもあり、typeof country「オブジェクト」文字列を提供します)。

つまり、これがここで発生することです。オブジェクトを作成すると、特に)のすべてのプロパティ(など)Arrayを継承します。ここで、この配列を2つのプロパティ(「SEK」と「USD」)で拡張します。しかし、それはこれらの文字列をまたはいくつかの同様のメソッドで配列にプッシュすることと同じではありません!そのため、それは同じままであり、混乱と混乱をもたらします。)。Array.prototypelengthpushlength

于 2012-11-21T10:54:44.637 に答える
2

これを試して:

var countries = {
    'Sweden': 'SEK',
    'United Stated': 'USD'
}, options = '', country;

for(country in countries) {
    options += '<option value="' + countries[country] + '" id="' + countries[country] + '">' + countries[country] + ' (' + country + ')</option>';
}
于 2012-11-21T10:50:47.990 に答える
1

配列を使用するのは不快に思えます。代わりに、 jsonオブジェクトjson.org wikipediaを使用してください。このようにして、キーと値の関係を利用できます。さらに、lintを使用して検証することもできます。jQueryは必要ありません。だからこれはコードです:

var currency = {
    "SEK": "Sweden",
    "USD": "United states",
    "GBP": "United Kingdom"
};

(function(obj) {
    var myselect = document.getElementById("currency");
    for (var key in obj) {
        var optElement = new Option( key+ " ( " + obj[key] + " ) ", key );
        optElement.id = key; //optElement.setAttribute ( "id", key);
        myselect.add ( optElement, null);
    }
})(currency);

関数に関しては、文字列を作成して選択に追加するのではなく、オブジェクトを使用して実行する方が良いと思います。これは無名関数であるため、自己完結型であり、他のコードに干渉することはありません。選択が作成された後に使用するか、ページの最後に配置します。

そしてjsfiddleの例

編集:

add()またはinnerHTMLを使用する-Chromeでは、innerHTMLが機能していません。そして、この方法の方が優れています。

オプションの削除については、remove()方法があります。次のいずれかを使用してください。

var x = document.getElementById("currency");
for ( var i = x.length; i > 0; i-- ) { x.remove ( 0 ); }

また

while ( x.length > 0 )               { x.remove ( x.length - 1 ); }
于 2012-11-21T11:44:07.720 に答える