2009-08-20 22 views
9

Tôi gặp sự cố khi ghép nối hai mảng kết hợp trong JavaScript. Bên dưới là mã mẫu:concat (trong JavaScript) không hoạt động đối với mảng kết hợp

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

Đây có phải là giới hạn đã biết không?

Cách tốt nhất để đạt được điều này là gì?

+0

wow .... tôi có thể biết tại sao heck tôi bị downvoted ........ đặt câu hỏi không đúng ở đây .. ?? pls hiển thị ur người bạn ur mặt ....... – RameshVel

+1

Tôi đã không bỏ phiếu bạn xuống, nhưng tôi đoán nó sẽ là một cái gì đó để làm với thực tế là bạn không thực sự giải thích vấn đề bạn đang nhìn thấy –

+0

anh tôi tôi đã tất cả các thông tin tôi đã nhận ... (concatenating hai mảng kết hợp) .. isnt rằng đủ ... ppl đặt câu hỏi bởi vì họ không biết .... phải .. – RameshVel

Trả lời

20

Bạn đang không sử dụng Array chức năng - chỉ Object chức năng. Trong JavaScript, Object là một mảng kết hợp - bạn sử dụng Array cho các mảng được lập chỉ mục theo số nguyên. Nếu bạn đã làm

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

thì concat sẽ hoạt động như mong đợi.

Nếu bạn thực sự muốn kết hợp các mảng kết hợp, làm:

for (var attr in src_array) { dest_array[attr] = src_array[attr]; } 

này tất nhiên sẽ ghi đè lên các phím hiện có trong dest_array đó có các đối tác trong src_array.

+0

cảm ơn câu trả lời ..đây là wat tôi mong đợi ... – RameshVel

2

Hãy thử điều này,

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

JavaScript không có mảng liên kết, nó có băm đối tượng. Bạn đang tạo một mảng và gán các giá trị cho một số thuộc tính của nó, chứ không phải trong mảng đó.

Bản concat của bạn sẽ không hoạt động vì các giá trị là thuộc tính đối tượng. Để làm một concat theo cách bạn có nó, bạn sẽ cần phải kết hợp hai đối tượng. YUI, jQuery và các khung công tác JavaScript khác cung cấp các phương thức hữu ích để thực hiện điều đó.

1

Nói đúng ra, đó không phải là mảng liên kết: chúng là các mảng có độ dài bằng không, với các thuộc tính được đặt tên bổ sung. Việc gán các thuộc tính này hoạt động vì các mảng cũng là các đối tượng trong JavaScript; nhưng điều đó không làm cho chúng thành một mảng kết hợp. Nó tốt hơn để xem chúng như băm.

Các phương pháp mảng như concat sẽ chỉ hoạt động với các phần tử được lập chỉ mục bằng số, không phải với các thuộc tính của đối tượng - ngay cả khi các đối tượng đó là mảng.

1

Mảng trong JavaScript chỉ có các phím số. Chỉ các đối tượng mới có thể có các thuộc tính không thuộc số. Vì vậy, hãy thử thay vào đó:

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

Tại sao dư thừa? Bạn đang lặp qua các thuộc tính trong mảng thứ hai và sau đó gọi "hasOwnProperty" trên mảng thứ hai với giá trị từ vòng lặp đầu tiên. Ý của bạn là thử nghiệm "hasOwnProperty" trên mảng đầu tiên? – doomspork

Các vấn đề liên quan