concat(在JavaScript中)不适用于关联数组

时间:2009-08-20 11:22:53

标签: javascript arrays concatenation

我在JavaScript中连接两个关联数组时遇到了问题。以下是示例代码:

var firstArray =  new Array();
firstArray.c1 = "sam";  
firstArray.c2 = "kam";
var secArray =  new Array();
secArray.c3 = "sam";    
secArray.c4 = "kam";
var res = firstArray.concat(secArray);

这是一个已知的限制吗?

实现这一目标的最佳方式是什么?

5 个答案:

答案 0 :(得分:20)

您没有使用Array功能 - 只有Object功能。在JavaScript中,Object是一个关联数组 - 您对由整数索引的数组使用Array。如果你做了

var firstArray =  new Array();
firstArray.push("sam");  
firstArray.push("kam");
var secArray =  new Array();
secArray.push("sam");    
secArray.push("kam");
var res = firstArray.concat(secArray);

然后concat将按预期工作。

如果您确实想要合并关联数组,请执行:

for (var attr in src_array) { dest_array[attr] = src_array[attr]; }

这当然会覆盖dest_arraysrc_array中具有对应项的现有密钥。

答案 1 :(得分:3)

试试这个,

var firstArray = new Array("sam","kam");
var secArray = new Array("sam","kam");
var res = firstArray.concat(secArray);

答案 2 :(得分:1)

JavaScript没有关联数组,它有对象哈希。您正在创建一个数组并为其某些属性赋值,而不是在数组本身中。

您的concat不起作用,因为值是对象属性。要按照你拥有它的方式进行连接,你需要组合这两个对象。 YUI,jQuery和其他JavaScript框架提供了有用的方法。

答案 3 :(得分:1)

严格来说,它们根本不是关联数组:它们是零长度的数组,带有其他命名属性。分配这些属性是有效的,因为数组也是JavaScript中的对象;但这并不能使它们成为一个关联数组。最好把它们看作是哈希。

concat之类的数组方法只能用于数组的数字索引元素,而不能使用对象的属性 - 即使这些对象恰好是数组。

答案 4 :(得分:1)

JavaScript中的数组只有数字键。只有对象可以具有非数字属性。所以试试这个:

var firstArray = {};
firstArray.c1 = "sam";
firstArray.c2 = "kam";
var secArray =  {};
secArray.c3 = "sam";  
secArray.c4 = "kam";

for (var prop in secArray) {
    if (secArray.hasOwnProperty(prop)) {
        firstArray[prop] = secArray[prop];
    }
}