Javascript 在for循环中只迭代一次特定代码

Javascript 在for循环中只迭代一次特定代码,javascript,jquery,json,ajax,for-loop,Javascript,Jquery,Json,Ajax,For Loop,经过几次尝试,我终于来了相信我会找到一个可能的解决办法 这是我的密码: var sections=[]; sections.push({ questions:questions }); for(var q1 in questions1){ if (questions1[q1].fieldtype == "checkbox") { var options=questions1[q1].mcoptions; for(var i=0;i <

经过几次尝试,我终于来了相信我会找到一个可能的解决办法

这是我的密码:

var sections=[];

sections.push({
    questions:questions
});

for(var q1  in questions1){
    if (questions1[q1].fieldtype == "checkbox") {
        var options=questions1[q1].mcoptions;
        for(var i=0;i < options.length;i++)
        {
            for(var c=0; c < checkedValues.length; c++)
            {
                if(options[i].value == checkedValues[c])
                {
                    questions.push({
                        seqNum : questions1[q1].seqNum, 
                        qtext : questions1[q1].qtext, 
                        qimage : questions1[q1].qimage,
                        fieldtype : questions1[q1].fieldtype,
                        mcoptions : mcoptions
                    });

                    mcoptions.push({
                        value : options[i].value,
                        greyOut : greyOut,
                    }); 

                    var grey=options[i].greyOut;
                    for(var g=0;g<grey.length;g++)
                    {
                        greyOut.push({
                            greyOut  : grey[g]
                        });
                    }
                }}
        }// for loop close
    }//fieldtype
}// q1 in questions
仅显示for循环中的一次。mCoptions。push和grey应在for循环中迭代其他值,并显示在问题[]下。现在,整个结构基于checkedValues进行迭代,但实际情况并非如此

问题2)在greyOut:mcoptions.push中的greyOut之后,我想从API中获取并添加另一个具有动态键和值的项。像mcoptions[value:value,greyOut:grey[g],x:1]

问题3)如果我转到同一部分并更改我的答案,然后单击提交(POST request),我希望删除并完全替换部分[0]

请帮助并分享您的宝贵建议。。事先非常感谢你

JSON格式:

[{
    "sessionName": "XYZ",
    "ID": "123",
    "sections": [{
        "slabel": "Development",
        "qlabel": "text",
        "questions": [{
            "seqNum": "1",
            "qtext": "What level of understanding would you say there is of Dev principles and methods?",
            "qimage": "",
            "fieldtype": "checkbox",
            "mcoptions": [{
                "value": "none",
                "greyOut": [
                    "1.1",
                    "1.2"
                ],
                "dev": "0"
            }, {
                "value": "some",
                "greyOut": [],
                "cog": "10"
            }, ]
        }]
    }, {
        "slabel": "Development111",
        "qlabel": "text",
        "questions": [{
            "seqNum": "1",
            "qtext": "What level of understanding would you say there is of Dev principles and methods?",
            "qimage": "",
            "fieldtype": "checkbox",
            "mcoptions": [{
                "value": "none",
                "greyOut": [
                    "1.1",
                    "1.2"
                ],
                "dev": "0"
            }, {
                "value": "some",
                "greyOut": [],
                "cog": "10"
            }, ]
        }]
    }]

}]            
1) 在推送新项目之前,您可以测试
问题
中是否已有内容:

if (questions.length == 0) {
    questions.push({
        seqNum : questions1[q1].seqNum, 
        qtext : questions1[q1].qtext, 
        qimage : questions1[q1].qimage,
        fieldtype : questions1[q1].fieldtype,
        mcoptions : mcoptions
    });
}
2) 执行API请求,并在回调中将附加属性添加到
mcoptions
值。您可以使用IIFE创建一个闭包来保存对回调中需要更新的对象的引用

var newmcoption = {
    value : options[i].value,
    greyOut : greyOut,
};
mcoptions.push(newmcoption);
(function(mcoption) {
    CallAPI(function(response) {
        mcoption.x = response;
    });
})(newmcoption);
3) 我不确定我是否理解问题的这一部分,但我认为你可以做到:

sections.length = 0;
sections.push({
    questions:questions
});
清除以前的数据并重新开始。

1)在将新项目推送到问题中之前,您可以测试问题中是否已经有内容:

if (questions.length == 0) {
    questions.push({
        seqNum : questions1[q1].seqNum, 
        qtext : questions1[q1].qtext, 
        qimage : questions1[q1].qimage,
        fieldtype : questions1[q1].fieldtype,
        mcoptions : mcoptions
    });
}
2) 执行API请求,并在回调中将附加属性添加到
mcoptions
值。您可以使用IIFE创建一个闭包来保存对回调中需要更新的对象的引用

var newmcoption = {
    value : options[i].value,
    greyOut : greyOut,
};
mcoptions.push(newmcoption);
(function(mcoption) {
    CallAPI(function(response) {
        mcoption.x = response;
    });
})(newmcoption);
3) 我不确定我是否理解问题的这一部分,但我认为你可以做到:

sections.length = 0;
sections.push({
    questions:questions
});

清除以前的数据并重新开始。

什么API?第三方API?如果你格式化你的代码,你就不需要这些注释了,中间括号关闭了中间的循环,它更容易阅读/理解,即使对你来说也是如此。然后,
mcoptions
greyOut
,您确定要对这些数组(Array.push)进行变异吗?因为这也会改变你在前面的问题中添加的所有参考资料。最后,我不理解你的问题,因为我不知道你的应用程序看起来像什么,它打算做什么,什么部分不正常,基本上我不在你脑子里。我需要更多的信息,关于你的代码应该做什么,做什么,不做什么以及有什么错。@zer00ne-是的,这是一个第三方API(URL),我将在其中对JSON数据进行字符串化并发布,然后获取JSON中的值。你的JSON无效。Javascript允许您将
放在数组的最后一个元素之后,但JSON不允许。@Thomas-我理解您的观点。请找到我添加了JSON的编辑版本。我希望现在您能够识别代码。我从这个JSON中获取值,比较用户在UI中检查的值,并将相同结构中的相应JSON值发布到另一个URL。谢谢。什么API?第三方API?如果你格式化你的代码,你就不需要这些注释了,中间括号关闭了中间的循环,它更容易阅读/理解,即使对你来说也是如此。然后,
mcoptions
greyOut
,您确定要对这些数组(Array.push)进行变异吗?因为这也会改变你在前面的问题中添加的所有参考资料。最后,我不理解你的问题,因为我不知道你的应用程序看起来像什么,它打算做什么,什么部分不正常,基本上我不在你脑子里。我需要更多的信息,关于你的代码应该做什么,做什么,不做什么以及有什么错。@zer00ne-是的,这是一个第三方API(URL),我将在其中对JSON数据进行字符串化并发布,然后获取JSON中的值。你的JSON无效。Javascript允许您将
放在数组的最后一个元素之后,但JSON不允许。@Thomas-我理解您的观点。请找到我添加了JSON的编辑版本。我希望现在您能够识别代码。我从这个JSON中获取值,比较用户在UI中检查的值,并将相同结构中的相应JSON值发布到另一个URL。谢谢。谢谢你的建议。实际上,问号[]下有多个值。因此我不能使用问题。长度==0。更像问题[0],等等。。请你纠正我在哪里可以实现像问题[q1]这样的索引。推..我发现你的问题很困惑,但我尽力去理解它。也许应该是
如果(问题[q1].length==0){questions[q1].push(…);}
谢谢你的建议。实际上,问号[]下有多个值。因此我不能使用问题。长度==0。更像问题[0],等等。。请你纠正我在哪里可以实现像问题[q1]这样的索引。推..我发现你的问题很困惑,但我尽力去理解它。也许它应该是
if(疑问[q1].length==0){questions[q1].push(…);}