我最初的衝動是將其直接轉換爲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;
}
見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