Moving a local scoped variable to global scope so I can import it to another JS file

69 Views Asked by At

Im trying to convert an excel sheet into a json object in javascript and Im having problems retrieving the final data as it is scoped locally. I would like to take the variable labelled as "inputData" and export it to another JS file however in order to do that it has to be at the top level of a file, which I assume means it has to be global scope. I cant for the life of me figure out how to get it from its local scope though. Any help would be appreciated.

Take a look at the code:

let selectedFile;

document.getElementById('input').addEventListener('change', (event) => {
    selectedFile = event.target.files[0];
})
document.getElementById('button').addEventListener('click', () => {

    if (selectedFile) {
        let fileReader = new FileReader();
        fileReader.readAsBinaryString(selectedFile);
        fileReader.onload = (event) => {
            let data = event.target.result;
            let workbook = XLSX.read(data, { type: "binary" })
            let rowObject = XLSX.utils.sheet_to_row_object_array(workbook.Sheets.Grid);
            let newData = rowObject.filter((item, index) => {
                return index === rowObject.findIndex((obj) => {
                    return JSON.stringify(item) === JSON.stringify(obj)
                })
            })

            newData.pop()

            let inputData = JSON.stringify(newData, undefined, 4)
            console.log(inputData)
        }
    }
})
1

There are 1 best solutions below

3
Viktor Luft On

You can export a mutable object as reference instead:

let selectedFile;

export const MyExport = { inputData: undefined };

document.getElementById('input').addEventListener('change', (event) => {
    selectedFile = event.target.files[0];
})
document.getElementById('button').addEventListener('click', () => {

    if (selectedFile) {
        let fileReader = new FileReader();
        fileReader.readAsBinaryString(selectedFile);
        fileReader.onload = (event) => {
            let data = event.target.result;
            let workbook = XLSX.read(data, { type: "binary" })
            let rowObject = XLSX.utils.sheet_to_row_object_array(workbook.Sheets.Grid);
            let newData = rowObject.filter((item, index) => {
                return index === rowObject.findIndex((obj) => {
                    return JSON.stringify(item) === JSON.stringify(obj)
                })
            })

            newData.pop()

            MyExport.inputData = JSON.stringify(newData, undefined, 4)
            console.log(inputData)
        }
    }
})