2017-07-05 102 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 
相關問題