2017-07-05 63 views
1

我想从全局函数声明一个数组,以便我的其他函数可以使用它,但我不知道如何,因为我使用一个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; 
}); 
}); 

这是否正确跟随您的答案在全球范围内声明?

+0

全局变量是不好的做法。 –

+0

更改为'var myArray = doc; GLOBAL.GlobalMyArray = myArray;返回回调(null,doc);' –

回答

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 

像在网页浏览器中。

+1

如果它是node.js(这很有可能因为它使用'require()'),它没有'window'对象 – slebetman

+0

是的,没有理解。在基于网页的JavaScript中有要求,但是它并没有像那样使用,而且本地的.csv文件正在被加载。 ;( –

+0

@AlexanderHiggins嗨,感谢您的回答,希望澄清一下,我是否正确地使用了 ,我用您的答案更新了我的问题 –

1

全局变量不被认为是良好的编程习惯。

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

一个简单的例子来实现,这是因为以下中的node.js:

创建模块GlobalArray。该模块将公开它定义的类的单例对象。这个类的构造函数创建成员变量。这个类现在使用如下方法暴露成员变量:Add,获取。此类的实例从模块中导出。

// 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; 

Both Add打印使用的模块声明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 
相关问题