javascript多层json数据添加问题

新手上路,请多包涵

javascript多层json数据添加为什么不行

clipboard.png

clipboard.png

clipboard.png

clipboard.png

for (var i in itemdata.content){
                    if(itemdata.content[i].guid == id){
                        
                        if(itemdata.content[i].value[key].is_array=="true"){
                            var aabbcc = ['','','']

                            itemdata.content[i].value[key].value[itemdata.content[i].value[key].value.length] = aabbcc;
                            itemdata.content[i].value[key].index[itemdata.content[i].value[key].index.length]='11';
                            
                            console.log(itemdata.content[i].value[key].value,'22222222222')
                            continue;

                        }else if(itemdata.content[i].value[key].is_array=="false"){
                            itemdata.content[i].value[key].value.push(["","",""]);
                            itemdata.content[i].value[key].index.push("");
                            itemdata.content[i].value[key].is_array = "true";
                            continue
                            
                        }
                        
                    }
                }

为什么这样添加不行呢 用数组的方法push 和 直接对象的 = 都不行 但打印出最里层数据是显示已经添加到第三个 但打印出最外层数据 却显示 还是第二 添加失败

阅读 3k
1 个回答

问问题要有注意问明的明确性和信息对称性。

明确性是指表明你在什么情况下遇到了什么什么问题,需要得到什么样的帮助,你期望的过程或者结果是怎么样的,而实际的过程和结果又是怎么样的

信息对称性是指……你在问问题的时候要清楚回答问题的人所了解的信息与你所了解的信息并不相同,比如,你在做什么,目的是什么,这些与问题直接相关的信息都应该描述出来。


现在来说说你的问题……说实在的,我并不知道你想干什么,也不知道 .is_array === "false" 的时候相关的数据是什么样子,甚至到底是 .is_array === "false" 还是根本就没有 .is_array 这个属性存在。

代码中大量使用了连续引用属性这种语法,比如 itemdata.content[i].value[key].value[...],这在阅读代码的时候很难理清关系,可以考虑适当的添加一些中间变量。像 array[array.length] = xxx 这种语法虽然没有错误,但在多层引用的情况下,直接使用 .push() 会让代码更简洁易懂(当然最好还是加中间变量)

从提供的信息来看, if 分支似乎没有问题,问题出在 else 分支上,但是题中并没有提到 else 分支上的相关信息(除了代码),但纯从代码分析,首先得保证 itemdata.content[i].value[key].value 是个数组,才能用 .push(),如果它都不是一个数组,而是 nullundefined 甚至是一个对象,那 .push 多半是要报错的。从逻辑上来说,既然它本身不是数组或没有数据,是可以用 =[ ["", "", ""] ] 来代替 .push(["", "", ""])

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题