当向一个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. Javascript 异步处理

    1.传统异步处理 ES6之前使用回调进行处理,示例代码: //创建一个异步返回 双倍数值 的函数 function asyncDouble(num,cb){ // 创建标识,表示该异步处理是否完成 v ...

  2. Echarts 颜色管理

    1.Echarts的颜色设计 Echarts的颜色的设置分为两种:色盘和具体颜色 色盘适合做全局设置,因为他里面有多个颜色,通俗的说色盘就是颜色预设值列表,色盘统一使用color属性进行配置. 而具体 ...

  3. m4 mac mini本地部署ComfyUI,测试Flux-dev-GGUF的workflow模型10步出图,测试AI绘图性能,基于MPS(fp16),优点是能耗小和静音

    m4 mac mini已经发布了一段时间,针对这个产品,更多的是关于性价比的讨论,如果抛开各种补贴不论,价位上和以前发布的mini其实差别不大,真要论性价比,各种windows系统的mini主机的价格 ...

  4. HarmonyOS Next 入门实战 - 文字转拼音,文字转语音

    文字转拼音 安装 pinyin4js 三方库 ohpm install @ohos/pinyin4js pinyin4js 提供了以下接口: ● 文字转拼音(带声调和不带声调) ● 文字转拼音首字母 ...

  5. IOS打开对应后缀文件

    IOS打开对应后缀文件 通过ShareExtension打开 点击文件共享后出现的上方列表,如下图 在 info.plist 中添加 Document types <key>CFBundl ...

  6. Git+Gitee使用分享

    Git+Gitee快速入门 创建仓库 ​ ​ ​ 初始化本地仓库 验证本地git是否安装好 打开cmd窗口,输入git ​ 这样就OK. Git 全局设置:(只需要设置一次) 这台电脑如果是第一次使用 ...

  7. Qt编写可视化大屏电子看板系统23-模块1产量汇总

    一.前言 大屏系统采用结构模块化的分层设计思路,一个表对应一个最小模块比如模具产量.零件产量,数据库采集的时候采集对应的表,拿到数据后按照对应的数据规则传给控件绘制,其中模具产量.零件产量两个模块采用 ...

  8. Qt编写安防视频监控系统45-图文报表

    一.前言 图文报表对应以前的文字报表,以前的日志查询后,需要打印或者导出,都是一行行的文字记录,近期需要图文警情记录打印和导出,于是彻底趁机将之前的数据导入导出(xls/pdf)及打印组件彻底改造重写 ...

  9. Qt编写的项目作品33-斗图神器(雨田哥作品)

    一.功能特点 支持HTTP,HTTPS网络表情图片下载,本地缓存. 采用MV模式,支持大量图片表情预览查看. 采用多线程异步下载图片刷新. 图片搜索功能(因网络提供API无信息字段提供,占搜索不了.但 ...

  10. VUE3基础环境搭建

    VUE3基础环境搭建 1. 安装vue.js npm install vue -g 安装webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bun ...