2010-01-06 31 views
7

Tôi đang cố chuyển đổi mảng hai chiều thành chuỗi để lưu trữ nó trong mảng localStorage. Tuy nhiên, có điều gì đó sai với mã này tôi không thể xác định:Cố gắng tham gia mảng hai chiều trong Javascript

for(x in array) { 
    if(array[x] instanceof Array) { 
     array[x] = array[x].join("`"); 
    } 
} 
var string = array.join("@"); 
localStorage[key] = string; 

Có ai có ý tưởng tôi đang làm sai không?

Đối với những gì là sai, bởi mảng đa chiều tôi có nghĩa là mảng [0] [1] vv Khi nhập vào localStorage, tất cả 'chuỗi' được giảm xuống là @, ngụ ý ở phía bên kia của @ có vẫn còn mảng.

+2

những cái gì đó là sai là gì? chắc chắn, bạn ucan nói những gì đầu vào của bạn là, những gì bạn mong đợi, và những gì sản lượng không mong muốn là? –

+0

Trên một sidenote, bạn có thể muốn xem xét việc sử dụng JSON.stringify thay vì các bộ lọc tùy chỉnh cho mục đích của bạn. – Tomas

+0

@Thomas - Tại thời điểm viết, JSON.stringify không có sẵn trong tất cả các trình duyệt (cụ thể, không có trong bản dựng Chrome ổn định). Bây giờ, tôi sẽ sử dụng nó, vâng. –

Trả lời

5

điều gì đó sai? chắc chắn, bạn ucan nói những gì đầu vào của bạn là, những gì bạn mong đợi, và những gì sản lượng không mong muốn là?

Ít nhất, nếu array thực sự là một mảng, bạn không nên sử dụng for..in loop. Đó là cho các đối tượng. Chỉ cần sử dụng một số điện thoại

for (var i=0, l=array.length; i<l; i++){ 
    if (array[i] instanceof Array){ 
     array[i] = array[i].join("`"); 
    } 
} 
+3

for..in loop là ok để sử dụng cho mảng, nó không chỉ cho các đối tượng .. miễn là bạn sử dụng 'hasOwnProperty'. – vsync

0

Mã của bạn dường như hoạt động tốt với tôi, thử nghiệm trong Firefox.

Báo cáo có bị lỗi trong trình duyệt cụ thể không?

var array = [ 
["a","b"], 
["c","d","e"]]; 
for(x in array) { 
    if(array[x] instanceof Array) { 
     array[x] = array[x].join("`"); 
    } 
} 
var string = array.join("@"); 
console.log(string); 
1

Javascript không có mảng hai chiều. Nó chỉ có mảng rách rưới. Mã của bạn làm việc cho tôi cho một đầu vào thích hợp:

array = [[1,2],[3,4]]; 
for(x in array) { 
    if(array[x] instanceof Array) { 
     array[x] = array[x].join("`"); 
    } 
} 
var string = array.join("@"); 
alert(string); 

Output:

1`[email protected]`4 

Ông có thể cho chúng ta thấy những gì bạn đang sử dụng đầu vào và đầu ra những gì bạn nhận được?

0

JSON giờ đây là tiêu chuẩn trong trình duyệt hiện đại. Bạn có thể sử dụng nó để "stringify" (chuyển đổi thành chuỗi JSON) và "phân tích cú pháp" chuyển đổi từ chuỗi JSON.

Bạn có thể sử dụng hàm JSON.stringify để chuyển đổi mảng 2D thành JSON và dán nó vào localStorage. Sau đó, bạn có thể sử dụng JSON.parse để chuyển đổi nó trở lại một mảng.

var my2DArray = [[1, 2, 3], [4, 5, 6]]; 
var stringified = JSON.stringify(my2DArray); 
localStorage[key] = stringified; 

var backToOriginal = JSON.parse(localStorage[key]); 
+2

Vào tháng 1 năm 2010, JSON không có sẵn như vậy trong các trình duyệt ổn định. ;) –

4

Ngày nay đây là đơn giản như:

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4