我有两个数组,一个是国家名称,另一个是货币类型。我想将这些合并在一起并使用国家/地区密钥而不是货币数组。什么是实现这一目标的最佳方式?
这就是我的代码现在的样子:
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>';
}
答案 0 :(得分:3)
这是一个常见的误解,你可以使用它:
for (var currency in country) {
result += { ... something done with both currency and country[currency] ... };
}
这里的问题是,在JS中,hash在技术上是无序的,所以你不能保证这些选项的顺序相同。
常见的替代方法是使用对象数组:
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
对象,并且它继承了Array.prototype
的所有属性(例如length
)。现在你扩展这个数组有两个属性 - 'SEK'和'USD';但这与使用push
或类似方法将这些字符串推入数组不同!这就是为什么length
保持不变,引入混乱和混乱的原因。 )
答案 1 :(得分: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>';
}
答案 2 :(得分: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);
至于函数 - 我认为最好用对象来做,而不是创建一个字符串,然后将它添加到select中。它是一个匿名函数,因此它是自包含的,不会干扰任何其他代码。只需在创建选择后使用它,或将其放在页面的末尾。
编辑:
在Chrome中使用add()或innerHTML - 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 ); }