1. 数组的克隆

一、 普通一维数组深克隆let arr = [1,2,3](1) for循环遍历数组pushlet arr1 = []for( let i of arr ){arr1.push(i)}console.log(arr1) // [1,2,3](2) slice()let arr1 = arr.slice()console.log(arr1) // [1,2,3](3) concat()let arr1 = arr.concat()console.log(arr1) // [1,2,3](4) es6 扩展运算符let arr1 = [...arr]console.log(arr1) // [1,2,3]二、任意维数组深克隆let arr = [[1, 2], [3, 4], { name: 'kobe' }]1.递归法function deepClone( o, t={} ){for( let k in o ) {if( o.hasOwnProperty(k) ) {if( o[k] instanceof Object ) {t[k] = o[k] instanceof Aarray ? [] : {}deepClone( o[k], t[k] )}else {t[k] = o[k]}}}return t}let arr1 = deepClone(arr, [])arr1[0].push(5)arr[2].name = 'james'console.log(arr,arr1) // arr [[1, 2, 5], [3, 4], { name: 'kobe' }]// arr1 [[1, 2, 5], [3, 4], { name: 'james' }]2. let arr1 = JSON.parse(JSON.stringify(arr)) // 结果同上

2. 对象的克隆

一.普通对象的深克隆(成员都是原始值类型)1.for循环遍历function copyObj(obj) {let res = {}for (let key in obj) {res[key] = obj[key]}return res}2.扩展运算符let obj1 = {...obj}3.Object.assign()let obj1 = Object.assign({},obj)二.任意对象的深克隆1.递归法function deepClone( o, t={} ){for( let k in o ) {if( o.hasOwnProperty(k) ) {if( o[k] instanceof Object ) {t[k] = o[k] instanceof Aarray ? [] : {}deepClone( o[k], t[k] )}else {t[k] = o[k]}}}return t}let obj1 = deepClone(obj)2. let obj1 = JSON.parse(JSON.stringify(obj))

JS篇之数组、对象的克隆相关推荐

  1. 字符串对象转数组对象_js对象转数组的方法 js怎么将数组对象转变成字符串

    只需要一句,arr.__proto__=[];但是要注意浏览器支持__proto__才行,最新的浏览器应该都支持. 以下两种都可以解决此问题: function transform(obj){ var ...

  2. 【js两个数组对象根据属性相同的值合并】

    js两个数组对象根据属性相同的值合并 数组对象 合并方法 数组对象 const a=[{uid: 1,name: '黄鹤楼'},{uid: 2,name: '鹳雀楼'},{uid: 3,name: ' ...

  3. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

  4. js的tree数组对象扁平化思否_JS专题之数组展开

    前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...

  5. js接收java数组对象_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  6. js两个数组对象通过相同元素匹配筛选

    let a = [ { name: 'joy', year: '24' }, { name: 'eve', year: '25' } ] let b = [ { name: 'joy', city: ...

  7. JS的Array数组对象方法一些总结

    不会影响原数组的对象方法: concat():   语法:array1.concat(array2,array3,...,arrayX),连接两个或者多个数组,返回一个连接后的新数组 entries( ...

  8. js 公共方法 数组对象求和

    JavaScript 中可以使用以下几种方法来求数组或对象的和: 使用循环 这是最常见的方法,可以使用 for 或 forEach 循环来遍历数组或对象,然后将每个元素的值相加即可. 例如,以下代码求 ...

  9. 原生js遍历 json数组对象

    //无规律 <script>var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}];for(var i=0,l=json.l ...

最新文章

  1. 管理距离 路由与交换_动态路由选择原理(距离矢量路由协议RIP)
  2. 安卓端网页浏览过程中实时更新title的web实现
  3. 利用Windows Server Backup备份数据进行域控裸机还原
  4. debian10新建文档_Debian 10(Buster)安装过程图文详解
  5. Android layout 优化:使用include和merge 标签
  6. Asp.net 邮件传输(转)
  7. 强化学习(十四) Actor-Critic
  8. 鹿邑2021高考成绩查询,鹿邑中考成绩查询2021
  9. 无线网卡dns服务器没有响应,无线网卡上不去网怎么设置dns
  10. (52)FPGA条件选择(casex)
  11. IBM Rational总经理夏然谈程序员生涯
  12. IDEA上传本地项目到SVN
  13. 计算机算法设计与分析 最大子段和问题
  14. SpringMVC 入门教程
  15. Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
  16. matlab怎么编写风雨荷载时程,风雨荷载作用下输电塔动力响应分析
  17. 但行好事 莫问前程(五月)
  18. 机器人 李永禄_第八届中国青少年机器人竞赛名单
  19. samba文件共享服务器,全网最详细的samba文件共享服务!
  20. uni-app的三种生命周期函数整理

热门文章

  1. 树莓派蓝屏_实战树莓派安装Windows XP
  2. 微信小程序开发---连接云开发数据库,实现数据获取
  3. wifi路由器中的WPS功能
  4. 计算机毕业设计系列基于JavaWeb小区停车场管理系统
  5. 分布式基础通信协议:paxos,totem和gossip
  6. 什么是网络运维工程师? 就业前景好吗?
  7. 7-12 兔子跳楼梯 高精度 java 斐波那契数列
  8. 慧停车安装后显示服务器异常,智能停车场系统常见故障以及排除方法
  9. word无法启动转换器html32,三种方法教你解决word无法启动转换器mswrd632问题
  10. 根据身份证号计算年龄、性别