Как мне объявить массив из функции глобально?

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; return callback(null, doc);
Теги:
arrays

2 ответа

1
Лучший ответ

Вы можете установить массив глобально внутри функции, назначив его объекту window.

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
  • 0
    Да, не уловил это. В веб-интерфейсе JavaScript требуется, но он так не используется, и загружается локальный файл .csv. ; (
Показать ещё 8 комментариев
1

глобальные переменные не считаются хорошей практикой программирования.

Хотя вы можете создать глобальный объектный модуль и ссылаться на эти модули во всех других модулях вашего проекта и играть с открытыми свойствами из него.

Простым примером для этого является следующее в node.js:

Создайте модуль GlobalArray. Этот модуль будет выставлять одноэлементный объект класса, который он определяет. Конструктор этого класса создает переменную-член. Этот класс теперь выставляет переменную-член, используя такие методы, как Add, Get. Экземпляр этого класса экспортируется из модуля.

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

Модуль для класса, который добавляет данные в Global Array, может быть создан следующим образом:

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

Оба модуля Add и Print используют оператор const globalArray = require("./GlobalArray") для ссылки на глобальный массив.

Теперь мы можем использовать модули Add и Print, ссылаясь на них в index.js, чтобы добавлять и печатать данные, используя Global Array.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню