通过锁定的变量进行 CSV 导入

CSV-import via variable locked in

本文关键字:CSV 导入 变量 锁定      更新时间:2023-09-26

我使用一个漂亮的代码来导入csv数据。但是,我的变量似乎以某种方式被捕获在函数中,因此我无法从.js中的其他地方访问它......

请参阅下面的代码中的两个警报函数。

从帖子复制的代码(如何从*读取数据。使用javascript的CSV文件?

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "../recipes.csv",
        dataType: "text",
        success: function (data) {
            processData(data);
        }
    });
});
function processData(allText) {
    var allTextLines = allText.split(/'r'n|'n/);
    var headers = allTextLines[0].split(',');
    var lines = [];
    for (var i = 0; i < allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {
            var tarr = [];
            for (var j = 0; j < headers.length; j++) {
                tarr.push(data[j]);
            }
            lines.push(tarr);
        }
    }
    dataArray = (lines + "").split(';');
    alert(dataArray[1]); // here it works
}
alert(dataArray[1]); // here it doesn't work: "ReferenceError: dataArray is not defined"
函数

processData(...)使用的dataArray变量仅存在于函数内部。

为了在函数外部使用它,您需要声明它。例如:

var dataArray = {};
function processData(allText) {
    var allTextLines = allText.split(/'r'n|'n/);
    var headers = allTextLines[0].split(',');
    var lines = [];
    for (var i=0; i<allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {
            var tarr = [];
            for (var j=0; j<headers.length; j++) {
                tarr.push(data[j]);
            }
            lines.push(tarr);
        }
    }
    dataArray = (lines + "").split(';');
    alert(dataArray[1]); 
}
$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "../recipes.csv",
        dataType: "text",
        success: function (data) {
            processData(data);
            alert(dataArray[1]); // here it will return the data from processData(...)
        }
    });
});

JavaScript中变量的作用域是什么?这是JavaScript中变量作用域的一个有趣的线程。