当前位置: 首页 > news >正文

深圳外贸网站公司做网站的公司哪家最好

深圳外贸网站公司,做网站的公司哪家最好,城市建设和房屋管理部门网站,洛克设计平台前言 js拷贝数组对象:浅拷贝&深拷贝,包括:Object.assign、concat、slice、JSON.parse(JSON.stringify()) 场景:弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中(每次选…

前言

js拷贝数组对象:浅拷贝&深拷贝,包括:Object.assign、concat、slice、JSON.parse(JSON.stringify())
场景:弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中(每次选择都将重新拷贝初始组织结构数据)
博客地址:芒果橙的个人博客 【http://mangocheng.com】


关于浅拷贝、深拷贝的使用场景

在开发过程中,需要基于某一个对象上进行新增修改的场景是非常多的,因此经常会进行对象的拷贝。在不需要多次复用源数据的情况下,那么对象的拷贝只需要进行赋值就能满足要求,即浅拷贝,但有时候需要多次使用到初始的原数组,那么则需要深拷贝,以达到每次拷贝原数组都是初始数据的目的

常用的拷贝方法

场景

  • 弹窗选择组织结构(树形结构),选择后显示相关数据至输入框中

  • 数据格式:[ {},{}]

  • 场景数据,案例使用

const copy = {// 源数组1:简单数组sourceArr: ['a', 'b', 'c'],			targetArr: [],// 源数组2:复杂数组sourceArrAndObj: [					{'A': 1,'B': 2},{'S': 10,'T': 20}],targetArrAndObj: []
}

1. 普通赋值语法-简单数据、复杂数据均为浅拷贝

目标数组=源数组

  • 测试数据
    • 源数组1-sourceArr:[‘a’, ‘b’, ‘c’]
    • 目标数组1-targetArr:[]
    • 源数组2-sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2 }, { ‘S’ : 10, ‘T’ : 20 } ]
    • 目标数组2-targetArrAndObj: []
  • 操作
    • 赋值目标数组
    • 增加目标数组1数据[d、e]
    • 增加目标数组2数据属性[C、D]、修改属性[S、T]
  • 输出
    • 源数组1-sourceArr = a,b,c,d,e
    • 源数组2-sourceArrAndObj = [ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
  • 结果&结论
    • 源数组改变
    • 浅拷贝作用
console.log('sourceArr = ', this.sourceArr.join());console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArr = this.sourceArr;this.targetArrAndObj = this.sourceArrAndObj;console.log('赋值后:targetArr = ', this.targetArr.join());console.log('赋值后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);

2. Object.assign(target,source)-简单数据深拷贝、复杂数据浅拷贝

Object.assign(目标数组,源数组)

  • 测试简单数据
    • 源数组sourceArr:[‘a’, ‘b’, ‘c’]
    • 目标数组targetArr:[]
  • 操作
    • 增加目标数组数据[d、e]
  • 输出
    • targetArr = a,b,c,d,e
    • sourceArr= a,b,c
  • 结果&结论
    • 源数组未改变
    • 深拷贝作用
console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());Object.assign(this.targetArr, this.sourceArr);console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());
  • 测试复杂数据
    • 源数组sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2 }, { ‘S’ : 10, ‘T’ : 20 } ]
    • 目标数组targetArrAndObj: []
  • 操作
    • 增加目标数组数据属性[C、D]
    • 修改属性[S、T]
  • 输出
    • sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
    • targetArrAndObj:[ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
  • 结果&结论
    • 源数组改变,与目标数组一样
    • 浅拷贝作用
console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);Object.assign(this.targetArrAndObj, this.sourceArrAndObj);console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);

3. concat()/slice()-简单数据深拷贝、复杂数据浅拷贝

目标数组=源数组.concat();

目标数组=源数组.slice();

  • 测试简单数据
    • 源数组sourceArr:[‘a’, ‘b’, ‘c’]
    • 目标数组targetArr:[]
  • 操作
    • 增加目标数组数据[d、e]
  • 输出
    • sourceArr= a,b,c
    • targetArr = a,b,c,d,e
  • 结果&结论
    • 源数组未改变
    • 深拷贝作用
console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());this.targetArr = this.sourceArr.concat();// this.targetArr = this.sourceArr.slice();console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());
  • 测试复杂数据
    • 源数组sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2 }, { ‘S’ : 10, ‘T’ : 20 } ]
    • 目标数组targetArrAndObj: []
  • 操作
    • 增加目标数组数据属性[C、D]
    • 修改属性[S、T]
  • 输出
    • sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
    • targetArrAndObj:[ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
  • 结果&结论
    • 源数组改变,与目标数组一样
    • 浅拷贝作用
console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArrAndObj = this.sourceArrAndObj.concat();// this.targetArrAndObj = this.sourceArrAndObj.slice();console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);

4. JSON.parse(JSON.stringify())-简单数据、复杂数据均为深拷贝

目标数组=JSON.parse(JSON.stringify(源数组))

  • 测试简单数据
    • 源数组sourceArr:[‘a’, ‘b’, ‘c’]
    • 目标数组targetArr:[]
  • 操作
    • 增加目标数组数据[d、e]
  • 输出
    • targetArr = a,b,c,d,e
    • sourceArr= a,b,c
  • 结果&结论
    • 源数组未改变
    • 深拷贝作用
console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());this.targetArr = JSON.parse(JSON.stringify(this.sourceArr));console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());
  • 测试复杂数据
    • 源数组sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2 }, { ‘S’ : 10, ‘T’ : 20 } ]
    • 目标数组targetArrAndObj: []
  • 操作
    • 增加目标数组数据属性[C、D]
    • 修改属性[S、T]
  • 输出
    • sourceArrAndObj:[ { ‘A’ : 1, ‘B’:2 }, { ‘S’ : 10, ‘T’ : 20 } ]
    • targetArrAndObj:[ { ‘A’ : 1, ‘B’:2, ‘C’ : 3, ‘D’ : 4 }, { ‘S’ : 30, ‘T’ : 40 } ]
  • 结果&结论
    • 源数组未改变
    • 深拷贝作用
console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArrAndObj = JSON.parse(JSON.stringify(this.sourceArrAndObj));console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);

参考代码

const copy = {sourceArr: ['a', 'b', 'c'],targetArr: [],sourceArrAndObj: [{'A': 1,'B': 2},{'S': 10,'T': 20}],targetArrAndObj: [],/*** = 赋值*/equalSign: function () {console.log('sourceArr = ', this.sourceArr.join());console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArr = this.sourceArr;this.targetArrAndObj = this.sourceArrAndObj;console.log('赋值后:targetArr = ', this.targetArr.join());console.log('赋值后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);},/*** Object.assign()*/objectAssign: function () {console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());Object.assign(this.targetArr, this.sourceArr);console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);Object.assign(this.targetArrAndObj, this.sourceArrAndObj);console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);},/*** concat方法*/concataAndSlice: function () {console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());this.targetArr = this.sourceArr.concat();// this.targetArr = this.sourceArr.slice();console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArrAndObj = this.sourceArrAndObj.concat();// this.targetArrAndObj = this.sourceArrAndObj.slice();console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);},/*** json转换*/json2array: function () {console.log('=========简单数组对象=========');console.log('sourceArr = ', this.sourceArr.join());this.targetArr = JSON.parse(JSON.stringify(this.sourceArr));console.log('拷贝后:targetArr = ', this.targetArr.join());console.log('=====增加目标数组数据[d、e]');this.targetArr.push('d');this.targetArr.push('e');console.log('更新后:sourceArr = ', this.sourceArr.join());console.log('更新后:targetArr = ', this.targetArr.join());console.log('=========复杂数组对象=========')console.log('sourceArrAndObj=', this.sourceArrAndObj);this.targetArrAndObj = JSON.parse(JSON.stringify(this.sourceArrAndObj));console.log('拷贝后:targetArrAndObj=', this.targetArrAndObj);console.log('=====增加目标数组数据属性[C、D];修改属性[S、T]');this.targetArrAndObj[0].C = 3;this.targetArrAndObj[0].D = 4;this.targetArrAndObj[1].S = 30;this.targetArrAndObj[1].T = 40;console.log('更新后:sourceArrAndObj=', this.sourceArrAndObj);console.log('更新后:targetArrAndObj=', this.targetArrAndObj);},test: function () {this.equalSign();// this.objectAssign();// this.concataAndSlice();// this.json2array();}}copy.test();
http://www.hkea.cn/news/736328/

相关文章:

  • 个人建网站允许吗seo职位要求
  • 环保网站设计网络营销优化推广
  • 网页设计网站制作公司冯耀宗seo视频教程
  • 怎么用路由器做网站百度指数平台官网
  • 济南做网站互联网公司有哪些seo是什么公司
  • 辛集seo网站优化价格许昌网站seo
  • 网站建设后期维护百度快速收录技术
  • 网站建设中的推广工作seo学校培训
  • 上海专业网站建设网百度搜索推广开户
  • 做学校网站素材图片合肥seo代理商
  • 真题真做报名网站淘宝搜索关键词排名
  • 免费的黄冈网站有哪些平台?培训行业seo整站优化
  • 寿县住房与城乡建设局网站真正免费的网站建站平台
  • 常德seo招聘网站seo站长工具
  • 网站开发多久完成俄罗斯搜索引擎yandex推广入口
  • 漳州做网站建设建网站免费
  • 网站建设服务上海广州软文推广公司
  • 做一个网站app需要多少钱web制作网站的模板
  • 网站建设的财务计划新媒体营销策略有哪些
  • 网站建设分金手指专业二八宁波品牌网站推广优化
  • 清远网站建设公司百度游戏风云榜
  • 网上可以自学什么技术win7系统优化软件
  • 嘉兴建站软件如何做好企业网站的推广
  • 在凡科做网站短视频推广
  • 深圳推广公司推荐q群排名优化软件
  • 什么网站做简历模板宁德市医院
  • 用什么软件做公司网站游戏推广赚佣金的平台
  • 购物网站 后台模板河北seo技术培训
  • 聊城建设委员会官方网站google seo
  • 广西建设网郭业棚seo推广具体做什么