Javascript循环推入全局数组

时间:2015-11-19 13:20:29

标签: javascript

1.我想将id [i]推入全局数组。在我推后,它将是每个数组中的id.length数字项,但它将是错误并且说y不是函数。如何解决它?

2.底部的sendrequest将向服务器发送xmlhttprequest,但我不明白为什么它会先运行然后函数(parResponse)将在tmpReadRequest.sendReadRequest()之后触发;已经失望了。

非常感谢

    var tes0=new Array();
    var tes1=new Array();
    var tes2=new Array();
    var tes4=new Array();
    var tes5=new Array();
    function ReadValuePath(id, Variable,id_2) {
        var tmpReadCB = function(parResponse)
        {
            for (var tmpIndex = 0; tmpIndex < parResponse.length; tmpIndex++)
            {
                var tmpItemValue = parResponse[tmpIndex];//console.log(tmpItemValue);
                var tmpValue = (tmpItemValue.mItemValue) ? tmpItemValue.mItemValue : tmpItemValue.mItemResultId;
                if(document.getElementById(id[tmpIndex]) != null && document.getElementById(id_2[tmpIndex]).value != 0)
                {   
                    document.getElementById(id[tmpIndex]).value = parseFloat(tmpValue).toFixed(2);  
                }
            }
            return true;
        }
        var tmpReadRequest = new OPCReadRequest("DE", tmpReadCB);
           for(var z=0;z<5;z++ ){
           for(var i = 0; i < id.length; i++)
           var y="tes"+z;
           y.push(id[i]);
            tmpReadRequest.addItem("ab", Variable[i]);
        }
}
    tmpReadRequest.sendReadRequest();
}

2 个答案:

答案 0 :(得分:0)

“在函数外声明的变量变为GLOBAL。

全局变量具有全局范围:网页上的所有脚本和函数都可以访问它。 “@ Source

Y不是数组,所以.push()不会对它起作用。 @ Source

答案 1 :(得分:0)

要通过您尝试的字符串文字访问全局范围,可以使用当前全局范围的窗口对象。

因此,在您的情况下,它将是window[y].push(id[i]);

另一个选择是稍微改变你的结构,因为我个人不喜欢直接访问窗口。

所以你可以定义像

这样的数组
var arrays = {
    tes0: [],
    tes2: [],
    tes3: [],
    tes4: [],
    tes5: [],
}

并访问它们:

arrays[y].push(id[i])

根据评论编辑

所以你想在循环中访问全局变量。你在中途。你正在做的是构建一个包含属性名称的字符串y,然后使用方括号中的字符串来访问该属性。

因此使用window选项:

for(var z=0;z<5;z++ ){
    var y="tes"+z;
    for(var i = 0; i < id.length; i++)
        window[y].push(id[i]);
    }
}

或使用第二个对象选项

/*
    Because arrays is an object we can use Object.keys
    This will return an array of the keys in our object which we can loop over to access each one
*/
Object.keys(arrays).forEach(function(key) {
    for(var i = 0; i < id.length; i++)
        arrays[key].push(id[i]);
    }
});

希望有助于解释