为什么是JSON.解析更改嵌套数组中的值
Why is JSON.parse changing the values in nested arrays?
为了学习Angular 2,我用Angular CLI做了一个Connect Four游戏,当时它使用的是SystemJS。
我正在用新的基于webpack的CLI从头开始复制工作,我遇到了一个奇怪的问题…
下面的方法接收带有json编码数据的字符串,并用它初始化一个新的游戏实例。我添加了一些console.log
来显示问题:
export class ConnectFourGameModel {
static fromJSON(jsonString: any): ConnectFourGameModel {
let jsonData = JSON.parse(jsonString);
console.log('*** from JSON (compare the "columns" array between jsonString and jsonData below) ***');
console.log('jsonString: ', jsonString);
console.log('jsonData: ', jsonData);
...
return result;
}
当它运行时,第一个console.log
正确显示JSON字符串:
jsonString:
{... Several fields here ...
"columns":[[0,0,0,0,0,1],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
}
但是第二个console.log
,它只是在这个字符串上调用JSON.parse
的结果,似乎随机地改变了值:
jsonData:
> Object {... Several fields here ...
> columns: Array[15]
V 0: Array[6]
0: 2 <-- Should be 0
1: 2 <-- Should be 0
2: -1 <-- Should be 0
etc...
为什么会发生这种情况?
如果你在Github Pages上加载应用程序,打开浏览器上的JavaScript控制台,然后单击任何一列来移动,你可能会看得更好。
仓库在Github上:https://github.com/cmermingas/connect-four-webpack
我在这里寻找关于解析JSON嵌套数组的问题。解析,但我无法将此问题与我发现的问题联系起来。
提前感谢!
如果您将字符串示例放入小提琴中,它似乎可以很好地解析:
https://jsfiddle.net/z67Lgyrm/可能发生的情况是,您正在更改console.log()
调用后的数据。当您单击日志中的展开箭头时,它实际上显示了对象现在的值。
你似乎也在列数组上使用slice()
,但因为它是多维的,它只是复制对子数组的引用(即不实际复制值)。
查看这里一个可能的解决方案:创建多维数组的副本,而不是引用- JavaScript
相关文章:
- 从多维嵌套json数组创建下拉列表
- 如何通过json对象数组为嵌套对象赋值
- 为循环嵌套的Javascript未按预期返回数组
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- MongoDB嵌套对象数组后查询
- 从对象数组中动态创建嵌套json
- 使用Angular.js解析JSON中的嵌套对象数组
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 将JS对象数组转换为嵌套形式的最有效方法
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 嵌套在 ng 重复中的拼接数组
- JavaScript格式的对象数组嵌套到子对象中
- JSON 将对象数组嵌套到表
- 如何获取数组嵌套对象子对象的父对象| MeteorJs-Astronomy
- 从数组嵌套JSON
- 使用AngularJS的JSON对象在数组嵌套在一个数组中,我怎么能得到数据到html
- 深入研究JavaScript中的一组嵌套对象
- 如何获得数组嵌套在对象的总和
- 将数组嵌套到主干模型中