10

我在连接 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);

这是一个已知的限制吗?

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

4

5 回答 5

21

您没有使用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_array其中有对应的src_array.

于 2009-08-20T11:32:40.800 回答
3

试试这个:

var firstArray = new Array("sam", "kam");
var secArray = new Array("sam", "kam");
var res = firstArray.concat(secArray);
于 2009-08-20T11:29:47.327 回答
1

JavaScript 没有关联数组;它有对象哈希。您正在创建一个数组并将值分配给它的某些属性,而不是数组本身。

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

于 2009-08-20T11:34:10.563 回答
1

严格来说,它们根本不是关联数组:它们是长度为零的数组,具有附加的命名属性。分配这些属性是可行的,因为数组也是 JavaScript 中的对象;但这并不能使它们成为关联数组。最好将它们视为哈希。

诸如此类的数组方法concat仅适用于数组的数字索引元素,而不适用于对象的属性——即使这些对象恰好是数组。

于 2009-08-20T11:36:16.300 回答
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];
    }
}
于 2009-08-20T11:37:38.573 回答