分配给数组的变量在数组执行时不更新(JS)

时间:2018-03-06 19:08:20

标签: javascript node.js

我正在分配一个变量,代理,等于一个数组。我试图在稍后的时间点向该数组添加项目,然后在其他文件中访问该数组。

问题是,proxyHelper.proxies值没有更新以反映代理变量的值。

修改数组后,console.log(proxies)返回修改后的数组,但console.log(proxyHelper.proxies)返回空白。我需要访问其他文件中的proxyHelper.proxies值,这样你就可以看出这是一个问题。

我在其他地方使用类似的代码并且工作正常 - 我没看到什么?

var proxies = [];

proxyHelper.proxies = proxies;

proxyHelper.tester = function(win) {

    electron.ipcMain.on('saveProxies', function(event, data) {
        // Clear the previous proxies from list
        proxies = [];
        // Split proxies based on line breaks
        if (data != '') {
            let proxiesList = data.split('\n');
            // i<= because we want to run a check to see if all proxies are added
            for (let i = 0; i <= proxiesList.length; i++) {
                // if the for loop hasn't ran through all proxies
                if (i + 1 <= proxiesList.length) {
                    proxies.push(proxiesList[i]);
                }
                // Once it's loop through all proxies
                else {
                    //Returns nothing
                    console.log(proxyHelper.proxies);
                    //Returns array with added items
                    console.log(proxies);
                    win.webContents.send('goodProxies', 'Saved!');
                }
            }
        } else {
            win.webContents.send('emptyProxies', 'Empty.');
        }
    })
}

3 个答案:

答案 0 :(得分:2)

proxies = [];

您刚刚为此变量分配了一个新数组。

proxyHelper.proxies仍然指向上一个值,并且不受影响。

你应该总是使用一个变量,或者改变它而不是重新分配它。

答案 1 :(得分:1)

以下是您的代码中发生的事情:

proxyHelper.proxies = []; // resets the object's property to a new empty array

因此,当您访问&#34; proxyHelper.proxies&#34;时,您始终会访问从未修改过的原始空数组...

你应该做的是:

{{1}}

答案 2 :(得分:0)

不需要proxy变量,因为其更改未反映到proxyHelper.proxies
只需使用proxyHelper.proxies本身 此外,我已经清理了你的代码一点点 您可以使用大量的Array方法,而不是for循环

proxyHelper.proxies = []

proxyHelper.tester = function(win) {

    electron.ipcMain.on('saveProxies', function(event, data) {
        //Split proxies based on line breaks
        if (data != '') {
            let proxiesList = data.split('\n');
            proxiesList.forEach(function(proxy) {
                proxyHelper.proxies.push(proxy)
            })
            win.webContents.send('goodProxies', 'Saved!');
        } else {
            win.webContents.send('emptyProxies', 'Empty.');
        }
    })
}