如何从函数全局声明数组?

时间:2017-07-05 05:03:43

标签: javascript arrays node.js

我试图从函数声明一个数组全局,以便我的其他函数也可以使用它但我不知道如何,因为我使用csvtojson转换器使整个事情很长,并想知道是否这是申报或不申请的方式?

JS:

//require the csvtojson converter class 
var Converter = require("csvtojson").Converter;
 // create a new converter object
var converter = new Converter({});
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/myproject';

// call the fromFile function which takes in the path to your 
// csv file as well as a callback function
var JSarray = converter.fromFile("./NTA-SAM-Inventory-List-Security-
Management-New_2017.csv",function(err, result, callback){
if(err){
    console.log("An Error Has Occured");
    console.log(err);  
} 
// the result of the conversion
console.log(result);
result.toArray(function(err,doc){
    if(err) throw err;
    console.log('ohhhhh');
    return callback(null, doc);
}
});

var array=[JSarray(function(err,doc)]这就是我声明数组的方式。 我的数组是doc,所以我可以返回回调,但是我应该如何得到数组,因为我有converter.fromFile("./NTA-SAM-Inventory-List-Security- Management-New_2017.csv"太长,所以在声明数组时我省略了它还是我做错了?感谢。

更新  只是想澄清一下我是否做得正确。

var JSarray = converter.fromFile("./NTA-SAM-Inventory-List-Security-M 
anagement-New_2017.csv",function(err, result, callback){
// if an error has occured then handle it
if(err){
    console.log("An Error Has Occured");
    console.log(err);  
} 
// the result of the conversion
console.log(result);
result.toArray(function(err,doc){
    if(err) throw err;
    console.log('ohhhhh');
    return callback(null, doc);
    var myArray= doc;
    GLOBAL.GlobalMyArray = myArray;
});
});

在全球范围内声明答案后,这是否正确?

2 个答案:

答案 0 :(得分:2)

全局变量不被视为良好的编程实践。

虽然您可以创建全局对象模块并在项目的所有其他模块中引用此模块,然后使用其中的公开属性进行播放。

实现此目的的一个简单示例如node.js中所示:

创建模块 GlobalArray 。该模块将公开它定义的类的单个对象。此类的构造函数创建成员变量。此类现在使用添加获取等方法公开成员变量。该类的实例从模块中导出。

// File: GlobalArray.js

class GlobalArray { 
    constructor(){
        this.array = [];
    }
    Add(item) {
        this.array.push(item);
    }
    Get(){
        return this.array;
    }
}

let globalArray = new GlobalArray();
module.exports = globalArray;

可以创建将数据添加到全局数组的类的模块,如下所示:

// File: Add.js

const globalArray = require("./GlobalArray");

class Add { 
    AddToGlobalArray(){
        globalArray.Add("1");
        globalArray.Add("2");
        globalArray.Add("3");
        globalArray.Add("4");
        globalArray.Add("5");
    }
}

module.exports = Add;

可以创建从全局数组打印数据的类的模块,如下所示:

// File: Print.js

const globalArray = require("./GlobalArray");

class Print {   
    PrintGlobalArray(){
        let array = globalArray.Get();
        for(let i=0; i<array.length; i++){
            console.log(array[i] + "\n");
        }
    }
}

module.exports = Print;

添加打印模块使用语句const globalArray = require("./GlobalArray")来引用全局数组

现在,我们可以使用添加打印模块,在 index.js 中引用它们,分别使用全局数组。

// File: index.js

const Add = require("./Add");
const Print = require("./Print");

// Creating object of Add module to add data to global array
let addObject = new Add();
addObject.AddToGlobalArray();

// Creating object of Print module to print data from global array
let printObject = new Print();
printObject.PrintGlobalArray();

执行 index.js 后,它会呈现以下输出:

>node index.js

1

2

3

4

5

答案 1 :(得分:1)

您可以通过将函数指定给窗口对象来在函数内部设置数组全局。

function myFunction() {
    var myArray = new Array();
    window.GlobalMyArray = myArray;
}

设置完成后,您可以随时随地使用GlobalMyArray

使用Node.Js可以使用全局

function myFunction() {
    var myArray = new Array();
     GLOBAL.GlobalMyArray = myArray;
}

您现在可以使用GLOBAL.GlobalMyArray

全局访问数组

在这种情况下,这样做非常有用:

GLOBAL.window = GLOBAL

就像在网络浏览器中一样。