热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中数组克隆的方法介绍(附代码)

本篇文章给大家带来的内容是关于JavaScript中数组克隆的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
本篇文章给大家带来的内容是关于Javascript中数组克隆的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

js主要分基本数据类型引用数据类型两大类

基本数据类型包括:number,string,undefine,null,boolean,Symbol(es6新增)
引用数据类型:Object,Array,Function,Data等
注意:基本数据类型放在**栈空间内**,并且是按值存放,可以直接读取和操作。
引用数据类型存放在**堆空间内**(门),变量的值其实是指向堆空间的地址(钥匙),因此如果克隆这个变量,相当于复制钥匙。

let arr = [1,2,3,4,5]
let arr1 = arr  // 这一步相当于把arr栈空间的地址赋给了arr1,其实arr和arr1操作的是同一个堆空间的对象
arr1.push(6) // arr1 = [1,2,3,4,5,6]
console.log(arr) //[1,2,3,4,5,6]

因此对于引用类型的拷贝,需要拷贝堆空间的对象

数组浅拷贝
1.运用数组slice与concat方法返回一个新数组的特性

let arr = [1,2,3,4,5]
let arr1 = arr.slice() //[1,2,3,4,5]
let arr2 = arr.concat() //[1,2,3,4,5]

2.简单粗暴的方法-遍历

let arr = [1,2,3,4,5]
let arr2 = []
arr.forEach(item=>{
    arr2.push(item)
    }
)
console.log(arr2)

3.es6新增方法-拓展运算符

let arr = [1,2,3,4,5]
let arr1 = [...arr] //[1,2,3,4,5]

4.es6新增方法-Object.assign
let arr = [1,2,3,4,5]
let arr1 = []
Object.assign(arr1,arr)
console.log(arr1) //[1,2,3.4,5]

如果数组里嵌套数组和对象,浅拷贝只会拷贝该数组或者对象存放在栈空间的地,因此无论在新旧数组中改变此地址指向的对象,两个数组都会发生改变。 因此我们需要深拷贝来拷贝此类数组。

数组深拷贝
1.普通遍历,遍历到引用类型时候进行引用类型的拷贝

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
      function clone (arr) {
        let arr1 = []
        arr.forEach(item=>{
        //如果不是object,将该值插入到新数组
          if(typeof(item) !== 'object') {
            arr1.push(item)
          } else {
          //根据遍历的对象新建一个相同类型的空对象
            let obj = item instanceof Array ? [] : {}
            for(var key in item){
              if(item.hasOwnProperty(key)){
                obj[key] = item[key]
              }
            }
            arr1.push(obj)
          }
        })
        return arr1
      }
      let arr1 = clone(arr)
      arr1[5].name = 'js'
      console.log(arr,'arr',arr1,'arr1')

2.简单粗暴(能拷贝数组和对象,但不能拷贝函数)

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
let arr1 = JSON.parse(JSON.stringify(arr))

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的Javascript教程视频栏目!

以上就是Javascript中数组克隆的方法介绍(附代码)的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Matplotlib,带有已保 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • PHP玩家基地系统毕业设计(附源码、运行环境)的用户登录界面、游戏管理和玩家作品管理
    本文介绍了一个PHP玩家基地系统的毕业设计,包括用户登录界面、游戏管理和玩家作品管理等功能。附带源码和运行环境,并提供免费赠送本源代码和数据库的方式,请私信获取详细信息。摘要共计约XXX字。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了《中秋夜作》的翻译及原文赏析,以及诗人当代钱钟书的背景和特点。通过对诗歌的解读,揭示了其中蕴含的情感和意境。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
Novice
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有