Javascript数组 - 将两个数组合并为一个

时间:2012-11-21 10:46:52

标签: javascript jquery arrays

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

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

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

3 个答案:

答案 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中。它是一个匿名函数,因此它是自包含的,不会干扰任何其他代码。只需在创建选择后使用它,或将其放在页面的末尾。

jsfiddle example

编辑:

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