2012-01-06 75 views
0

例如我有類似的東西。簡單的導入和導出和存儲數組的方法

var Ar : Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

而我需要將它存儲在簡單的文本文件中。像這樣

ArText : String ; 
ArtText = "0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

你明白了。

將數組轉換爲可讀的字符串,然後返回的最佳方式是什麼? Javascript代碼將是最好的,但你幾乎可以使用任何類似的。

+2

見http://www.w3schools.com/jsref/jsref_tostring_array.asp,http://www.w3schools.com/jsref/jsref_join.asp和http://www.w3schools.com /jsref/jsref_split.asp – Stefan 2012-01-06 11:22:55

回答

0

如果是數組中只是字符串,你可以使用join()方法Array對象上創建一個逗號分隔的字符串,然後使用String對象的split()方法將字符串轉換回一個數組。

var Ar = new Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

var stringRepresentation = Ar.join(","); 
var backToArray = stringRepresentation.split(";"); 

你可以在這裏看到這個工作; http://jsfiddle.net/ykQRX/。注意我也修復了無效JavaScript(var Ar = new Array;)。

+0

你的代碼會輸出這樣的字符串「apple ,,, pineapple ,,,,,,,,, car ,,,,,,,,, apple ,,,,,,,,,, ,,狗,,,,,,,,貓「它不是很可讀。我需要更緊湊的東西,比如「1個蘋果,3個菠蘿......」 – rendom 2012-01-06 12:29:00

4

我最初的衝動是將其直接轉換爲JSON,但後來我意識到,JSON.stringify()會回到這樣的事情:

["apple",null,null,"pineapple",null,null,null,null,null,null,null,null,"car",null,null,null,null,null,null,null,null,"apple",null,null,null,null,null,null,null,null,null,null,null,"dog",null,null,null,null,null,null,null,"cat"] 

因爲你的陣列有一堆不確定的插槽,所有成爲null因爲JSON沒有按不支持未定義的值。如果你只需要存儲它,除非你將它轉換回一個數組,否則你可以確定,否則你最終會得到空值而不是未定義的數組,所以你必須允許這樣做(沒什麼大不了的),但是在任何情況下這聽起來像你希望它也是人類可讀的。

因此,我建議您將其轉換爲對象,然後使用JSON.stringify()將對象轉換爲JSON。要將其轉換回來,請使用JSON.parse()將字符串轉換爲對象,然後遍歷對象屬性以創建稀疏數組。

什麼我提議將導致JSON字符串像這樣:

{"0":"apple","3":"pineapple","12":"car","21":"apple","33":"dog","41":"cat"} 

代碼:

function sparseArrayStringify(arr) { 
    var obj = {}, 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      obj[i] = arr[i]; 
    return JSON.stringify(obj); 
} 

function parseToSparseArray(str) { 
    var arr = [], 
     obj = JSON.parse(str), 
     k; 
    for (k in obj) 
     arr[k] = obj[k]; 
    return arr; 
} 

var stringifiedArray = sparseArrayStringify(Ar); // where Ar is your array 

// and change it back 
var anArray = parseToSparseArray(stringifiedArray); 

工作演示:http://jsfiddle.net/XXqVD/

注:在我的parseToSparseArray()函數我沒有打擾測試被解析的字符串中的對象的屬性實際上是非負的ative整數,但如果需要,可以添加。

較新的瀏覽器支持使用關聯方法的JSON對象,或者對於較舊的瀏覽器,可以包含json2.js庫。

順便說一下,你的問題中的代碼是無效的JavaScript:你不能用JS中的類型聲明變量。查看我的代碼中的示例,瞭解如何聲明數組,對象等。

編輯:好的,我不知道爲什麼地球上你想要非JSON版本,當JSON是一個衆所周知的標準格式,但這裏有一些未經測試的功能,完全讀取和寫入格式問題:

"0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

注意,如果任何數組元素包含逗號或連字符您提出的格式,將無法正常工作。這就是爲什麼JSON是你應該去的方式。總之:

function serialiseArray(arr) { 
    var workingArray = [], 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      workingArray.push(i + "-" + arr[i]); 
    return workingArray.join(","); 
} 

function deserialiseArray(str) { 
    var arr = [], 
     items = str.split(","), 
     item, 
     i; 
    for (i=0; i < items.length; i++) { 
     item = items[i].split("-"); 
     arr[item[0]] = item[1]; 
    } 
    return arr; 
} 
+0

是的,它很好。但是沒有JSON呢。 – rendom 2012-01-06 12:56:07