Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组无法';更新';没有深度拷贝_Javascript_Arrays_Json - Fatal编程技术网

Javascript 数组无法';更新';没有深度拷贝

Javascript 数组无法';更新';没有深度拷贝,javascript,arrays,json,Javascript,Arrays,Json,我今天正在使用阵列,现在已经筋疲力尽(轻描淡写)。出于某种原因,我的数组“无法更新”(因为缺少更好的词)——或者至少在我的控制台窗口中是这样 让阵列“更新”的唯一方法是在执行进一步操作之前对其进行“深度复制”,如: graphArray = JSON.parse(JSON.stringify(graphArray)); //supply plugIt = graphArray['supplyDemand']['supply'][ind]; graphArray['supplyDemand'][

我今天正在使用阵列,现在已经筋疲力尽(轻描淡写)。出于某种原因,我的数组“无法更新”(因为缺少更好的词)——或者至少在我的控制台窗口中是这样

让阵列“更新”的唯一方法是在执行进一步操作之前对其进行“深度复制”,如:

graphArray = JSON.parse(JSON.stringify(graphArray));
//supply
plugIt = graphArray['supplyDemand']['supply'][ind];
graphArray['supplyDemand']['supply'][ind] = parseInt(plugIt) + parseInt(total);

graphArray = JSON.parse(JSON.stringify(graphArray));

//cardiology
plugIt = graphArray['supplyDemand']['cardiology'][ind];
graphArray['supplyDemand']['cardiology'][ind] = parseInt(plugIt) + val.cardiology ;

graphArray = JSON.parse(JSON.stringify(graphArray));

//elderly care
plugIt = graphArray['supplyDemand']['elderly care'][ind];
graphArray['supplyDemand']['elderly care'][ind] = parseInt(plugIt) + val['elderly care'];

graphArray = JSON.parse(JSON.stringify(graphArray));
我能让以下代码“工作”(即“更新”其值)的唯一方法是在每个步骤之间深度复制数组,如下所示:

graphArray = JSON.parse(JSON.stringify(graphArray));
//supply
plugIt = graphArray['supplyDemand']['supply'][ind];
graphArray['supplyDemand']['supply'][ind] = parseInt(plugIt) + parseInt(total);

graphArray = JSON.parse(JSON.stringify(graphArray));

//cardiology
plugIt = graphArray['supplyDemand']['cardiology'][ind];
graphArray['supplyDemand']['cardiology'][ind] = parseInt(plugIt) + val.cardiology ;

graphArray = JSON.parse(JSON.stringify(graphArray));

//elderly care
plugIt = graphArray['supplyDemand']['elderly care'][ind];
graphArray['supplyDemand']['elderly care'][ind] = parseInt(plugIt) + val['elderly care'];

graphArray = JSON.parse(JSON.stringify(graphArray));

谁能告诉我这里发生了什么事吗?

嗯?“更新”代码在哪里?正在创建的阵列在哪里?它来自哪里?数组是否存在于该范围内?
console.log(graphArray)
显示什么?
plugIt
total
有什么?为什么
parseInt
没有基数10?哪里是
ind
?什么事件正在使用“数组”(实际上,它是一个对象,而不是数组)?据我所知,JSON.parse(JSON.stringify(graphArray))应该是原始的graphArray@bwright对。如果之前它“不更新”,那么在获取它的最后一个版本后它怎么会“更新”呢?我认为在我的控制台窗口中,最关键的是:登录到控制台的对象可能包含错误的值,因为它是异步的,当您在控制台中展开对象并显示当前状态时,浏览器会获取值,而不是日志记录时的状态。尝试使用
console.log(JSON.stringify(graphArray))
看看它是否有用。或者,尝试使用
setTimeout
看看它是否在50毫秒后得到更新。