经过几次尝试,我终于来到这里。我会得到一个可能的解决方案......
这是我的代码:
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
此代码将从API执行GET请求,比较复选框值并以JSON格式发布在另一个API中。
问题1)在比较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
});
仅显示for循环中的一次。 mCoptions。 push和gray应迭代for循环中的其他值并在问题[]下显示。现在整个结构基于checkedValues进行迭代,但情况并非如此。
问题2)在mcoptions.push中的greyOut:greyOut之后,我想从API中获取并添加另一个具有动态键和值的项。像mcoptions [value:value,greyOut:gray [g],x:1]
问题3)如果我转到同一部分并更改我的答案并单击提交(POST请求),我希望删除部分[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"
}, ]
}]
}]
}]
答案 0 :(得分:0)
1)您可以在推送新项目之前测试questions
是否已包含某些内容:
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
});
清除以前的数据并重新开始。