繁体   English   中英

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

[英]Function 'concat' (in JavaScript) is not working for associative arrays

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

这是一个已知的限制吗?

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

您没有使用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中的现有键,这些键在dest_array中有对应src_array

试试这个:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM