javascript - 如何在javascript中的回调函数之后获取for循环中递增的值?

标签 javascript jquery angularjs

我的要求:

我想使用 for 循环获取值列表。在 for 循环中,一次迭代完成一次,然后回调将发送该值列表(数组)。 一旦第一次迭代完成,第二次循环值应该获得增量值。

例如:5 个值 第 5 次迭代后循环结束。那么第二次循环应该以“0”开始,但这里它从最后一个递增的值开始。请帮助我实现这一目标。

下面的代码第一次运行正常。

回调函数:

$inventoryManagement.getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId(objectId,attributeId, function(objectAttributeBlockElement) {
    //$scope.val = myOwnJ;
    console.log(objectAttributeBlockElement);
});

功能:

var myOwnJ = 0;
// Getting ObjectId And AttributeId Using CellId For Normal Controls
var getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId = function(objectId,attributeId, callback) {

    var objectAttributeBlockElement = [];// one array

    try {
        // iterate over the objectAttributes
        for (var i = 0; i < pageObject.objects.length; i++) {               
            if (pageObject.objects[i].id == objectId) { 
                var name = "";
                var labelName = "";
                var dataTypeId = "";                    
                for (;myOwnJ < pageObject.objects[i].objectAttribute.length;) {                 
                    name = pageObject.objects[i].objectAttribute[myOwnJ].name;// got the current label name
                    labelName = pageObject.objects[i].objectAttribute[myOwnJ].labelName;// got the current name
                    dataTypeId = pageObject.objects[i].objectAttribute[myOwnJ].dataTypeId;// got the current dataTypeId

                    objectAttributeBlockElement.push(name,labelName,dataTypeId);
                    callback(objectAttributeBlockElement, myOwnJ++);                        
                    return;                         
                }
            }
        }
        throw {
            message: "objectId not found: " + objectId
        };
    } catch (e) {
        console.log(e.message + " in getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId");
    }
};

最佳答案

您可以将 j 作为附加函数参数传递,例如

var getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId = function(objectId, attributeId, j, callback) {

所以它不会是局部变量。然后,不要在本地声明它,而是使用以下内容:

for (j = ((j === null) ? 0 : j); j < pageObject.objects[i].objectAttribute.length; j++) {

这样,如果您使用 j 调用函数,则每次调用后它都会递增。

我不推荐的另一种方法是通过将 j 声明为函数外部而不是将其作为参数传递,从而将其设为全局变量。这样您就根本不必修改函数声明。如果您能做到这一点,我强烈建议修改变量名称,因为 j 对于全局范围变量来说太通用了,迟早会引起麻烦:使用类似 myOwnJ 你会没事的。

编辑:完整源代码(根据OP的要求):

 var myOwnJ = 0;
// Getting ObjectId And AttributeId Using CellId For Normal Controls
var getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId = function(objectId,attributeId, callback) {

    var objectAttributeBlockElement = [];// one array

    try {
        // iterate over the objectAttributes
        for (var i = 0; i < pageObject.objects.length; i++) {               
            if (pageObject.objects[i].id == objectId) { 
                var name = "";
                var labelName = "";
                var dataTypeId = "";                    
                if(myOwnJ < pageObject.objects[i].objectAttribute.length) {                 
                     name = pageObject.objects[i].objectAttribute[myOwnJ].name;// got the current label name
                     labelName = pageObject.objects[i].objectAttribute[myOwnJ].labelName;// got the current name
                     dataTypeId = pageObject.objects[i].objectAttribute[myOwnJ].dataTypeId;// got the current dataTypeId

                     objectAttributeBlockElement.push(name,labelName,dataTypeId);
                     callback(objectAttributeBlockElement, myOwnJ++);                       
                    return;                         

                }
                else {
                    myOwnJ = 0;
                }

            }           
        }

        throw {
            message: "objectId not found: " + objectId
        };

    } catch (e) {
        console.log(e.message + " in getObjectNameAndAttributeAndDataTypeIdUsingObjectAndAttributeId");
    }

};

关于javascript - 如何在javascript中的回调函数之后获取for循环中递增的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31850988/

相关文章:

php - Firefox 表单提交问题与 jQuery

javascript - 这个 jquery $ ('.some-class' ,$ ('#some-id' )) 是什么意思?

javascript - 从客户端隐藏 API key

javascript - 在 Javascript 和 MATLAB 中计算 pi - 不同的速度

javascript - 在 Javascript 中连接四 - 对 Angular 线获胜检查

javascript - Angularjs 输入类型 = 文件不控制台数据

java - 最佳实践 :Deploying Angular App and Spring REST Api

javascript - Angular $routeParams 空对象

javascript - 网络音频频率限制?

javascript - 单击提交按钮时按索引迭代数组 Ruby on Rails