当向一个json数组追加的节点被修改时,所有对象的的节点都被修改了

众所周知,追加json节点时,我们通常会直接给不存在的节点赋值

比如这样:

let json = [
{
id:'1'
},
{
id:'2'
}
]
let state = {
'onStart': false,
'onStop': false,
'shutdown': false
} for(leti=0;i<json.length; i++) {
json.state=state
} //结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]

这样就得到了一个新的节点.

而这样得到的节点似乎出现了一点问题.我们试着修改其中一个数据:

json[0].state["onStart"]=true

我们希望的结果当然是

//结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': false,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]

然而实际的结果却是

//结果
//json == [
// {
// id:'1',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// },
// {
// id:'2',
// state:{
// 'onStart': true,
// 'onStop': false,
// 'shutdown': false
// }
// }
//]

造成这种情况的原因是:

由于state是引用变量 ,进行引用赋值 , 其实还是原来的数组 , 也就是说 ,我赋给json.state,其实一直都是同一个地址里存的同一个数组 , 所以 ,修改后 ,每个引用都一起改掉了 , 那么怎么解决呢 ?

json.state = JSON.parse(JSON.stringify(state )) ;

原理就是先把数组转换成字符串再转换成对象 ,这样会新分配一块内存新创建一个对象.

当向json数组追加节点时,再去修改它,发现所有的该节点的数据都被修改了的更多相关文章

  1. Json数组追加数据

    背景:在做一个购物车的时候,点击第一个商品,然后存入一个json数组中,点击第二个商品的时候,又继续在json数组中追加,代码如下: <script type="text/javasc ...

  2. javascript查找子节点时,html里的换行可能会被当成节点

    1.直接去HTML里找到该换行的地方去掉换行 2.写一个方法把元素类型为空格而且是文本都删除 function del_ff(elem){ var elem_child = elem.childNod ...

  3. 不用再去找rem了,你想要的rem都在这

    一.兼容性. 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem(大胆用吧,目前几乎所有手机浏览器都支持rem) 二.什么是rem. rem是相对于根元素 ...

  4. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  5. 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题

    这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...

  6. 表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这种写法就是把组件嵌套改为配置方式

    表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这 ...

  7. 当返回值为json字符串时 如何获得其中的json数组

    json数据格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06&quo ...

  8. JSON 数组格式

    JSON 数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人 ...

  9. [转]用GSON 五招之内搞定任何JSON数组

    关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 <Google Gson的使用方法,实现Json结构的相互转换> ,写的很好,通俗易懂. 我为什么写这篇文章呢?因为前几晚跟 ...

  10. [转] Android:用GSON 五招之内搞定任何JSON数组

    [From] http://www.open-open.com/lib/view/open1472632967912.html 写在前面 关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 ...

随机推荐

  1. 强网杯2023 谍影重重3.0 wp

    参考文章:[使用主动探测方法识别 U2hhZG93c29ja3M=(base64) 服务 - Phuker's Blog]:https://phuker.github.io/posts/U2hhZG9 ...

  2. 授权|取消授权MYSQL数据库用户权限

    授权 queryusr用户查询test数据库 grant select on test.* to queryusr@'%'; flush PRIVILEGES 收回queryusr用户查询test数据 ...

  3. Flutter查漏补缺2

    Flutter的理念架构 Flutter架构分为三层 参考官方文档 Framework层(dart) flutter engine层(C/C++) embeder层(platform-specific ...

  4. 加速人民币国际化,CIPS迎来三大变化

    何谓CIPS? 人民币跨境支付系统(Cross-border Interbank Payment System,简称CIPS)是由中国人民银行组织开发的独立支付系统,为境内外金融机构人民币跨境和离岸业 ...

  5. k3s 轻量级Kubernetes 安装实例

    k3s是由Rancher开发的轻量级Kubernetes,支持嵌入式系统,边缘计算节点等 易于安装,所有组件都在一个小于100MB的二进制文件中,占用资源低 1.1.简单安装试例 curl -sfL ...

  6. 【C#】【平时作业】习题-13-数据类型

    目录 1. 什么是 ArrayList ,如何存放数据? 2. 什么 Queue ,如何存放数据? Queue 类的方法和属性 3. 什么 Stack ,如何存放数据? 4. 什么 Hashtable ...

  7. RedisTemplate配置的jackson.ObjectMapper里的一个enableDefaultTyping方法过期解决

    1.前言 最近升级SpringBoot,从2.1.6版本升级到2.2.6版本,发现enableDefaultTyping方法过期过期了. 该方法是指定序列化输入的类型,就是将数据库里的数据安装一定类型 ...

  8. Qt开源作品31-屏幕截图控件

    一.前言 屏幕截图控件在我的很多项目中都有用到,尤其是嵌入式的系统上的软件,因为在嵌入式系统中,基本上系统都很精简,甚至连UI都没有,开机之后直接运行的就是Qt程序,很多时候需要对软件进行截图保存下来 ...

  9. Qt音视频开发2-vlc回调处理

    一.前言 用句柄来显示视频,方便是很方便,但是有个缺点就是不能拿到实时视频的每张图片的数据,这个就比较讨厌,大部分的监控行业的应用,除了截图以外,很可能需要拿到图片自己做一些处理的,而且拿到图片自己绘 ...

  10. Python读取栅格图像并对像元数据处理后导出到表格文件中

      本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在 ...