保存Javascript数组以在另一个文件中使用

时间:2014-07-23 21:24:26

标签: javascript jquery html arrays json

编辑以尝试增加清晰度:

我有两个文件:number-crunching.js和chart.html。

number-crunching.js有一个JSON对象:

var data = [
{
  "mother": "Ellen",
  "father": "Bob",
  "pet": "cat",
  "age":50,
  "hairLength":10
},

{
  "mother": "Sandra",
  "father": "Jeff",
  "pet": "dog",
  "age":18,
  "hairLength":2
}
];

然后它有一个run函数来处理该数据并返回一个多维数组,如下所示:

[
  ['mother', 'father', 'pet', 'age', 'hairLength'],
  ['Ellen', 'Bob', 'cat', 50, 10],
  ['Sandra, 'Jeff', 'dog', 18, 2]
]

创建此数组的所有内容都包含在一个名为run的函数中,该函数返回已完成的数组。

在第二个文件chart.html(有一些JS)中,我包含了number-crunching.js并调用了run函数并将该数组存储在chart.html中。

var editedData = run();    editedData现在包含上面的数组。

然后我在html页面的图表中可视化editedData的内容。

图表需要永远加载,因为它每次都在run函数中执行所有计算,这涉及多次循环遍历JSON对象,这是一个非常大的对象。因此,在页面上加载需要永远。

我想要做的是分开这些文件。因此,我不想在run中调用chart.html,而是将数组存储在chart.html中。所以,我想进行一次数字运算并以某种方式保存数组,所以我不必再进行数字运算了。

基本上,我只想使用数字运算和run 一次。也就是说,它应该将run的结果保存到某处,以便我可以将数组复制到chart.html文件中并将其用于我的Web应用程序。

我该怎么做?感谢您的帮助,对不起,如果第一次不清楚的话。

1 个答案:

答案 0 :(得分:0)

您需要查看HTML5's FileSystem

您需要创建一个文件并以JSON格式将数组推入其中。

Fiddle

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;

function errorHandler(err) {
   console.log("Error happened");
   console.log(err);
}

var yourdata = [
  ['mother', 'father', 'pet', 'age', 'hairLength'],
  ['Ellen', 'Bob', 'cat', 50, 10],
  ['Sandra', 'Jeff', 'dog', 18, 2]
];

function onInitFs(fs) {

    fs.root.getFile('data.json', {create: true}, function(fileEntry) {
        fileEntry.createWriter(function(fileWriter) {
            fileWriter.onwriteend = function(e) {
console.log('Write completed.');
            };

            fileWriter.onerror = function(e) {
console.log('Write failed: ' + e);
            };

            var json = JSON.stringify(yourdata);
            console.log(json);
            var blob = new Blob([json], {type: "application/json"});
            fileWriter.write(blob);
        }, errorHandler);
    }, errorHandler);

}

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024, function(grantedBytes) {
    // Is this a bug? This function is called instantly, i didn't even granted permission or anything. You need to refresh after granting permission.
    window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, errorHandler);