Javascript 为什么我的递归函数不能正确循环使用JSON?
最近编辑为较短 在这里问这个问题可能不太可能,但我需要一个我创建的递归函数的帮助。它没有从JSON中获取我想要的值。基本上,我希望得到所有“流”对象ID,它们的“类型”为“标准”或“块”。这些对象可以嵌套在父“Flow”对象下的多个“Flow”对象中,这就是为什么我需要一个递归方法来搜索所有这些对象。我创建了一个代码笔,因此您可以在这里看到我得到的结果: 该函数位于底部,名为“GroupRecursion”,我将JSON“Payload”作为参数传递给它 在我的数组ArrayOfBlockId中,我只得到了大约3个ID(字符串),我应该正好得到4个字符串,因为有多少对象具有“Type”=“Standard”或“Block”。谢谢你的时间,如果这不是这个地方,让我知道Javascript 为什么我的递归函数不能正确循环使用JSON?,javascript,json,Javascript,Json,最近编辑为较短 在这里问这个问题可能不太可能,但我需要一个我创建的递归函数的帮助。它没有从JSON中获取我想要的值。基本上,我希望得到所有“流”对象ID,它们的“类型”为“标准”或“块”。这些对象可以嵌套在父“Flow”对象下的多个“Flow”对象中,这就是为什么我需要一个递归方法来搜索所有这些对象。我创建了一个代码笔,因此您可以在这里看到我得到的结果: 该函数位于底部,名为“GroupRecursion”,我将JSON“Payload”作为参数传递给它 在我的数组ArrayOfBlockId
var Payload = {
"Type": "Root",
"FlowID": "FL_1",
"Flow": [
{
"Type": "Group",
"FlowID": "FL_27",
"Description": "Pass 1",
"Flow": [
{
"Type": "EmbeddedData",
"FlowID": "FL_7",
"EmbeddedData": [
{
"Description": "JSON",
"Type": "Recipient",
"Field": "JSON",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false
},
{
"Description": "DisplayLogicFrom",
"Type": "Recipient",
"Field": "DisplayLogicFrom",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false
},
{
"Description": "DisplayLogicAt",
"Type": "Recipient",
"Field": "DisplayLogicAt",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false
}
]
},
{
"Type": "Branch",
"FlowID": "FL_54",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "EmbeddedField",
"LeftOperand": "APITest",
"Operator": "EqualTo",
"RightOperand": "True",
"_HiddenExpression": false,
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"LeftOpDesc\">APITest</span> <span class=\"OpDesc\">Is Equal to</span> <span class=\"RightOpDesc\"> True </span>"
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "Standard",
"ID": "BL_4NL909leoyn5KBf",
"FlowID": "FL_51"
},
{
"Type": "Standard",
"ID": "BL_bBGbASH2RnPCskt",
"FlowID": "FL_59"
},
{
"Type": "WebService",
"FlowID": "FL_50",
"URL": "https://co1.qualtrics.com/API/v3/surveys",
"Method": "POST",
"RequestParams": [],
"EditBodyParams": [
{
"key": "file",
"value": "${e://Field/TEST}"
},
{
"key": "name",
"value": "new survey"
}
],
"Body": [
{
"key": "file",
"value": "${e://Field/TEST}"
},
{
"key": "name",
"value": "new survey"
}
],
"ContentType": "application/x-www-form-urlencoded",
"Headers": [
{
"key": "x-api-token",
"value": "h69TKYgxu46SMEXzcKkeRUXovq2jALTpHDhPUGLq"
}
],
"ResponseMap": [
{
"key": "meta.requestId",
"value": "meta.requestId"
},
{
"key": "meta.error.errorCode",
"value": "meta.error.errorCode"
},
{
"key": "meta.error.errorMessage",
"value": "meta.error.errorMessage"
},
{
"key": "meta.httpStatus",
"value": "meta.httpStatus"
}
],
"FireAndForget": false,
"SchemaVersion": 0,
"StringifyValues": true
},
{
"Type": "Standard",
"ID": "BL_4Yhl7MpygFG9Z6B",
"FlowID": "FL_53"
}
]
},
{
"Type": "Standard",
"ID": "BL_0GHahOV7Hb9l141",
"FlowID": "FL_3"
},
{
"Type": "Branch",
"FlowID": "FL_5",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "Question",
"QuestionID": "QID4",
"QuestionIsInLoop": "no",
"ChoiceLocator": "q://QID4/SelectableChoice/1",
"Operator": "Selected",
"QuestionIDFromLocator": "QID4",
"LeftOperand": "q://QID4/SelectableChoice/1",
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"QuestionDesc\">What would you like to do?</span> <span class=\"LeftOpDesc\">Check if there is custom validation/Force Response on my survey and on what questions</span> <span class=\"OpDesc\">Is Selected</span> "
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "Block",
"ID": "BL_3n1Vmp4FL6cZZuR",
"FlowID": "FL_2"
},
{
"Type": "EndSurvey",
"FlowID": "FL_11"
}
]
},
{
"Type": "Branch",
"FlowID": "FL_56",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "Question",
"QuestionID": "QID4",
"QuestionIsInLoop": "no",
"ChoiceLocator": "q://QID4/SelectableChoice/6",
"Operator": "Selected",
"QuestionIDFromLocator": "QID4",
"LeftOperand": "q://QID4/SelectableChoice/6",
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"QuestionDesc\">What would you like to do?</span> <span class=\"LeftOpDesc\">Re-Number the questions to be in order but add \"TEXT\" to descriptive text questions.</span> <span class=\"OpDesc\">Is Selected</span> "
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "Standard",
"ID": "BL_9ESRPcpuMl5TNcx",
"FlowID": "FL_60"
},
{
"ID": "BL_cACgbdijKOAtRo9",
"Type": "Standard",
"FlowID": "FL_61"
},
{
"Type": "Standard",
"ID": "BL_0SuWoa7K2CkYFsV",
"FlowID": "FL_55"
}
]
},
{
"Type": "Branch",
"FlowID": "FL_58",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "Question",
"QuestionID": "QID4",
"QuestionIsInLoop": "no",
"ChoiceLocator": "q://QID4/SelectableChoice/6",
"Operator": "NotSelected",
"QuestionIDFromLocator": "QID4",
"LeftOperand": "q://QID4/SelectableChoice/6",
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"QuestionDesc\">What would you like to do?</span> <span class=\"LeftOpDesc\">Re-Number the questions to be in order but add \"TEXT\" to descriptive text questions.</span> <span class=\"OpDesc\">Is Not Selected</span> "
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "Standard",
"ID": "BL_2tA1Ilad6iCEEu1",
"FlowID": "FL_13"
},
{
"Type": "EmbeddedData",
"FlowID": "FL_14",
"EmbeddedData": [
{
"Description": "APIToken",
"Type": "Custom",
"Field": "APIToken",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false,
"Value": "${q://QID18/ChoiceTextEntryValue/2}"
},
{
"Description": "Datacenter",
"Type": "Custom",
"Field": "Datacenter",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false,
"Value": "${q://QID18/ChoiceTextEntryValue/1}"
}
]
},
{
"Type": "Standard",
"ID": "BL_0r1ZjeAhMBEBhdz",
"FlowID": "FL_4"
},
{
"Type": "Branch",
"FlowID": "FL_21",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "Question",
"QuestionID": "QID17",
"QuestionIsInLoop": "no",
"ChoiceLocator": "q://QID17/SelectableChoice/4",
"Operator": "Selected",
"QuestionIDFromLocator": "QID17",
"LeftOperand": "q://QID17/SelectableChoice/4",
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"QuestionDesc\">What type of questions will you be using?</span> <span class=\"LeftOpDesc\">matrix choice to multiple choice question</span> <span class=\"OpDesc\">Is Selected</span> "
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "Standard",
"ID": "BL_6ilSpb6iiCzWvtz",
"FlowID": "FL_20"
},
{
"Type": "Standard",
"ID": "BL_a4faBNVnTi19wLr",
"FlowID": "FL_23"
},
{
"Type": "EmbeddedData",
"FlowID": "FL_25",
"EmbeddedData": [
{
"Description": "Conjunction",
"Type": "Custom",
"Field": "Conjunction",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false,
"Value": "${q://QID32/ChoiceGroup/SelectedChoices}"
}
]
},
{
"Type": "EmbeddedData",
"FlowID": "FL_26",
"EmbeddedData": [
{
"Description": "Operator",
"Type": "Custom",
"Field": "Operator",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false,
"Value": "${q://QID29/ChoiceGroup/SelectedChoices}"
}
]
},
{
"Type": "Standard",
"ID": "BL_2lVBP4EOiOwT0Kp",
"FlowID": "FL_24"
}
]
},
{
"Type": "Branch",
"FlowID": "FL_6",
"Description": "New Branch",
"BranchLogic": {
"0": {
"0": {
"LogicType": "Question",
"QuestionID": "QID17",
"QuestionIsInLoop": "no",
"ChoiceLocator": "q://QID17/SelectableChoice/1",
"Operator": "Selected",
"QuestionIDFromLocator": "QID17",
"LeftOperand": "q://QID17/SelectableChoice/1",
"Type": "Expression",
"Description": "<span class=\"ConjDesc\">If</span> <span class=\"QuestionDesc\">What type of questions will you be using?</span> <span class=\"LeftOpDesc\">multiple choice to multiple choice</span> <span class=\"OpDesc\">Is Selected</span> "
},
"Type": "If"
},
"Type": "BooleanExpression"
},
"Flow": [
{
"Type": "EmbeddedData",
"FlowID": "FL_10",
"EmbeddedData": [
{
"Description": "Operator",
"Type": "Custom",
"Field": "Operator",
"VariableType": "String",
"DataVisibility": [],
"AnalyzeText": false,
"Value": "${q://QID13/ChoiceGroup/SelectedChoices}"
}
]
},
{
"Type": "Standard",
"ID": "BL_4IMpxjrEATyLuqV",
"FlowID": "FL_19"
},
{
"Type": "Standard",
"ID": "BL_bBjaPeuYnHFtBBP",
"FlowID": "FL_9"
}
]
}
]
},
{
"Type": "Standard",
"ID": "BL_eD0WiECJYD2l0nr",
"FlowID": "FL_28"
}
]
},
{
"Type": "Standard",
"ID": "BL_1Mk6LuLiukBnCU5",
"FlowID": "FL_17"
},
{
"Type": "EndSurvey",
"FlowID": "FL_16"
},
{
"Type": "WebService",
"FlowID": "FL_15",
"URL": "https://co1.qualtrics.com/API/v:version/surveys",
"Method": "PUT",
"RequestParams": [],
"EditBodyParams": [
{
"key": "QuestionText",
"value": "Hello"
},
{
"key": "DataExportTag",
"value": "Q2"
},
{
"key": "QuestionType",
"value": "MC"
},
{
"key": "Selector",
"value": "SAVR"
},
{
"key": "SubSelector",
"value": "TX"
},
{
"key": "Configuration",
"value": "{\"QuestionDescriptionOption\":\"UseText\"}",
"parameterType": "JSON"
},
{
"key": "QuestionDescription",
"value": "Hello?"
},
{
"key": "Choices",
"value": "{\"Choices\": {\n \"1\": {\n \"Display\": \"Statement 1\"\n },\n \"2\": {\n \"Display\": \"Statement 2\"\n },\n \"3\": {\n \"Display\": \"Statement 3\"\n }\n }}",
"parameterType": "JSON"
},
{
"key": "Language",
"value": "[]",
"parameterType": "JSON"
},
{
"key": "Validation",
"value": "{\"Settings\": {\n \"ForceResponse\": \"OFF\",\n \"ForceResponseType\": \"ON\",\n \"Type\": \"None\"\n }}",
"parameterType": "JSON"
}
],
"Body": {
"QuestionText": "Hello",
"DataExportTag": "Q2",
"QuestionType": "MC",
"Selector": "SAVR",
"SubSelector": "TX",
"Configuration": {
"QuestionDescriptionOption": "UseText"
},
"QuestionDescription": "Hello?",
"Choices": {
"Choices": {
"1": {
"Display": "Statement 1"
},
"2": {
"Display": "Statement 2"
},
"3": {
"Display": "Statement 3"
}
}
},
"Language": [],
"Validation": {
"Settings": {
"ForceResponse": "OFF",
"ForceResponseType": "ON",
"Type": "None"
}
}
},
"ContentType": "application/json",
"Headers": [
{
"key": "x-api-token",
"value": "h69TKYgxu46SMEXzcKkeRUXovq2jALTpHDhPUGLq"
}
],
"ResponseMap": [],
"FireAndForget": false,
"SchemaVersion": 0,
"StringifyValues": true
}
],
"Properties": {
"Count": 61,
"RemovedFieldsets": []
}
}
var ArrayOfBlockIDs = []
var RecursionCount = 0;
function GroupRecursion(item){
for(i=0;i<item.Flow.length;i++){
if(item.Flow[i].Type=="Standard" && ArrayOfBlockIDs.includes(item.Flow[i].ID)==false || item.Flow[i].Type=="Block" && ArrayOfBlockIDs.includes(item.Flow[i].ID)==false){
ArrayOfBlockIDs.push(item.Flow[i].ID)
}
if(item.Flow[i].Type=="Group" || item.Flow[i].Type=="Branch"){
GroupRecursion(item.Flow[i])
}
}
console.log(ArrayOfBlockIDs)
}
GroupRecursion(Payload);
var有效载荷={
“类型”:“根”,
“FlowID”:“FL_1”,
“流动”:[
{
“类型”:“组”,
“FlowID”:“FL_27”,
“说明”:“通过1”,
“流动”:[
{
“类型”:“嵌入数据”,
“FlowID”:“FL_7”,
“嵌入式数据”:[
{
“说明”:“JSON”,
“类型”:“收件人”,
“字段”:“JSON”,
“VariableType”:“字符串”,
“数据可见性”:[],
“分析文本”:错误
},
{
“说明”:“DisplayLogicFrom”,
“类型”:“收件人”,
“字段”:“DisplayLogicFrom”,
“VariableType”:“字符串”,
“数据可见性”:[],
“分析文本”:错误
},
{
“说明”:“DisplayLogicAt”,
“类型”:“收件人”,
“字段”:“DisplayLogicAt”,
“VariableType”:“字符串”,
“数据可见性”:[],
“分析文本”:错误
}
]
},
{
“类型”:“分支机构”,
“FlowID”:“FL_54”,
“说明”:“新分支机构”,
“BranchLogic”:{
"0": {
"0": {
“LogicType”:“EmbeddedField”,
“左操作数”:“APITest”,
“操作员”:“EqualTo”,
“RightOperator”:“True”,
“隐藏的表达”:假,
“类型”:“表达式”,
“说明”:“如果APITest等于True”
},
“类型”:“如果”
},
“类型”:“布尔表达式”
},
“流动”:[
{
“类型”:“标准”,
“ID”:“BL_4NL909leoyn5KBf”,
“FlowID”:“FL_51”
},
{
“类型”:“标准”,
“ID”:“BL_bBGbASH2RnPCskt”,
“FlowID”:“FL_59”
},
{
“类型”:“WebService”,
“FlowID”:“FL_50”,
“URL”:”https://co1.qualtrics.com/API/v3/surveys",
“方法”:“发布”,
“请求参数”:[],
“EditBodyParams”:[
{
“密钥”:“文件”,
“值”:“${e://Field/TEST}”
},
{
“键”:“名称”,
“价值”:“新调查”
}
],
“正文”:[
{
“密钥”:“文件”,
“值”:“${e://Field/TEST}”
},
{
“键”:“名称”,
“价值”:“新调查”
}
],
“ContentType”:“application/x-www-form-urlencoded”,
“标题”:[
{
“密钥”:“x-api-token”,
“值”:“H69TKYGXU46SMEXZCKKERUXOVQ2JALTPHPUGLQ”
}
],
“响应映射”:[
{
“key”:“meta.requestId”,
“值”:“meta.requestId”
},
{
“key”:“meta.error.errorCode”,
“值”:“meta.error.errorCode”
},
{
“key”:“meta.error.errorMessage”,
“值”:“meta.error.errorMessage”
},
{
“密钥”:“meta.httpStatus”,
“值”:“meta.httpStatus”
}
],
“放火而忘记”:错,
“阴谋厌恶”:0,
“StringifyValues”:true
},
{
“类型”:“标准”,
“ID”:“BL_4Yhl7MpygFG9Z6B”,
“FlowID”:“FL_53”
}
]
},
{
“类型”:“标准”,
“ID”:“BL_0GHahOV7Hb9l141”,
“FlowID”:“FL_3”
},
{
“类型”:“分支机构”,
“FlowID”:“FL_5”,
“说明”:“新分支机构”,
“BranchLogic”:{
"0": {
"0": {
“逻辑类型”:“问题”,
“问题ID”:“QID4”,
“问题列表”:“否”,
“ChoiceLocator”:“q://QID4/SelectableChoice/1”,
“操作员”:“已选择”,
“QuestiondFromLocator”:“QID4”,
“LeftOperator”:“q://QID4/SelectableChoice/1”,
“类型”:“表达式”,
“说明”:“如果您想做什么?检查我的调查和选择的问题是否有自定义验证/强制响应”
},
“类型”:“如果”
},