[英]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.