我在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);
这是一个已知的限制吗?
实现这一目标的最佳方式是什么?
答案 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_array
中src_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];
}
}