导入和导出和存储数组的简单方法

时间:2012-01-06 11:10:26

标签: javascript arrays import export

例如,我有类似的东西。

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"

你明白了。

将Array转换为可读字符串然后返回的最佳方法是什么? Javascript代码将是最好的,但您几乎可以使用任何类似的代码。

2 个答案:

答案 0 :(得分: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()函数中,我没有费心测试被解析的字符串中对象的属性实际上是非负整数,但是如果需要可以添加它。

较新的浏览器支持使用关联方法的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;
}

答案 1 :(得分:0)

如果数组中的只是字符串,您可以使用Array对象上的join()方法创建逗号分隔的字符串,然后使用{{3 String对象上的方法将字符串转换回数组。

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

你可以在这里看到这个; split()。注意我还修复了无效的JavaScript(var Ar = new Array;)。