2009-08-20 29 views
9

我在使用JavaScript連接兩個關聯數組時遇到了問題。以下是示例代碼:concat(在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

哇....我可以知道爲什麼這個赫克我是downvoted ........問問題在這裏是錯誤的..?請你顯示我的朋友你的臉....... – RameshVel 2009-08-21 08:11:25

+1

我沒有投票給你,但我想這將是事實,你不能真正解釋你看到的問題 – 2009-08-21 08:27:49

+0

弟弟我給所有的信息我得到了...(連接兩個關聯數組)..沒有足夠的...... ppl問問題,因爲他們不知道....正確.. – RameshVel 2009-08-21 08:32:35

回答

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同行。

+0

感謝您的答覆..這是我期望的笏... – RameshVel 2009-08-20 12:12:37

2

試試這個,

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

JavaScript沒有關聯數組,它有對象哈希。您正在創建一個數組併爲其某些屬性賦值,而不是數組本身。

您的concat將不起作用,因爲這些值是對象屬性。要按照您的方式進行concat,您需要組合這兩個對象。 YUI,jQuery和其他JavaScript框架爲此提供了有用的方法。

1

嚴格來說,它們根本不是關聯數組:它們是長度爲零的數組,具有額外的命名屬性。分配這些屬性是可行的,因爲數組也是JavaScript中的對象;但是這並不能使它們成爲一個關聯數組。最好將它們看作散列。

concat這樣的數組方法只能用於數組的數值索引元素,而不能用於對象的屬性 - 即使這些對象碰巧是數組。

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

爲什麼冗餘?您正在遍歷第二個數組中的屬性,然後使用第一個循環的值在第二個數組上調用「hasOwnProperty」。你是否想要在第一個數組上測試「hasOwnProperty」? – doomspork 2009-08-20 11:58:10