2

我有两个数组,一个是国家名称,一个是货币类型。我想将这些合并在一起并使用国家/地区键而不是货币数组。实现这一目标的最佳方法是什么?

这就是我的代码现在的样子:

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会给你 'object' 字符串)。

所以这就是这里发生的事情:你创建了一个Array对象,它继承了Array.prototype(例如length)的所有属性,特别是。现在你用两个属性扩展这个数组 - 'SEK' 和 'USD'; 但这与使用push或某些类似方法将这些字符串推入数组不同!这就是为什么它length保持不变,引入混乱和混乱。)

于 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 object 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 回答