JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)

这篇具有很好参考价值的文章主要介绍了JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述:JavaScript的深拷贝和浅拷贝大家都比较熟悉,今天来分享下深拷贝,就是使用该函数时,会复制拷贝一份该数据,修改该数据属性,不会改变原有数据,就是把复制的对象所引用的对象全都复制了一遍,具体实现如下;

1、定义拷贝对象;

var oldObj = {
  name: "张三",
  age: 18,
  colors: ["skyblue", 'plum', "pink"],
  status: {
    hobby: "study",
  }
}

2、定义递归函数deepClone(),实现深拷贝,方便调用;

function deepClone(obj) {
  //判断传进来的参数类型不是对象数组 或者是null时 直接返回
  if (typeof obj !== "object" || obj == null) {
    return obj
  }
  //定义返回值
  let result;
  // 判断传进来的数据类型 是数组/对象 就给result一个数组/对象
  if (obj instanceof Array) {
    result = []
  } else {
    result = {}
  }
  //循环遍历方便拷贝
  for (let key in obj) {
    //判读自有属性
    if (obj.hasOwnProperty(key)) {
      //函数递归实现深层拷贝
      result[key] = deepClone(obj[key])
    }
  }
  //返回出去
  return result
}

//优化
function deepClone(obj) {
  //判断传进来的参数类型不是对象数组 或者是null时 直接返回
  if (typeof obj !== "object" || obj == null) {
    return obj
  }
  //定义返回值result
  // 判断传进来的数据类型 是数组/对象 就给result一个数组/对象
  let result = Array.isArray(obj) ? [] : {};
  //循环遍历方便拷贝
  for (let key in obj) {
    //判读自有属性
    if (obj.hasOwnProperty(key)) {
      //函数递归实现深层拷贝
      result[key] = deepClone(obj[key])
    }
  }
  //返回出去
  return result
}

        2.1、obj instanceof Array 和 Array.isArray(obj)都是检测对象是否是一个数组的方法,更多判断数组的方法,详见

判断数组的7种方法https://blog.csdn.net/weixin_65793170/article/details/127082200?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167901515816800222886256%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167901515816800222886256&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-127082200-null-null.blog_rank_default&utm_term=%E6%95%B0%E7%BB%84&spm=1018.2226.3001.4450

3、调用函数,实现递归深拷贝;

const newObj = deepClone(oldObj);
//检验拷贝结果
newObj.name = "李四";
newObj.status.hobby = "敲代码";
newObj.colors[2] = "purple";
console.log("oldObj", oldObj);
console.log("newObj", newObj);

        3.1、输出结果,未改变原有嵌套层级较深的数据,递归函数,深拷贝成功;

js深拷贝,vue,js,vscode,javascript,vue.js,前端

4、具体使用,可以直接在项目中新建js文件导出该方法,然后引入使用,方便实现数据深拷贝:

1、导出:export function deepClone(obj) { ... }

2、引入:import { deepClone } from "../utils/clone.js";

3、使用:const data = deepClone(this.obj)        console.log(data);

方便了很,哈哈,点赞收藏呀(●'◡'●)......文章来源地址https://www.toymoban.com/news/detail-613586.html

到了这里,关于JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript之深度克隆、多种实现方式、列举各种方式的优缺点、对象自有属性、拷贝、复制

    在 JavaScript 中,对象和数组是引用类型,当将一个对象或数组赋值给另一个变量时,它们实际上是共享同一块内存空间。这意味着对一个对象或数组的修改会影响到所有引用它的变量。 为了创建一个独立的副本,可以使用深克隆。 JSON.stringify() 方法将 JavaScript 对象转换为一个

    2024年02月02日
    浏览(45)
  • 【JavaScript】深度理解js的函数(function、Function)

    学了这么久的JavaScript,函数在JavaScript中最常用之一,如果你不会函数,你就不会JavaScript。 函数就是Function对象,一个函数是可以通过外部代码调用的一个“子程序”,它是头等(first-class)对象,因为它们可以像任何其他对象一样具有属性和方法 。瞧瞧它的定义,注定它能

    2024年01月21日
    浏览(45)
  • [从零开发JS应用] 如何在VScode中配置Javascript环境,常见的调试方法有哪些?

    记录环境配置:本文配置的环境主要针对单独JS文件的断点调试,主要是为了调试LeetCode里面的代码。 首先在官网下载对应的版本:https://nodejs.org/en/ 开始安装,可以自定义选择安装路径。 这里 选择Add Path ,系统变量会自动设置,但是用户变量并没有自动设置,需要的话可以

    2024年02月04日
    浏览(56)
  • 深入探讨javascript的流程控制与分支结构,以及js的函数

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏: 前端泛海 景天的主页: 景天科技苑 在javascript中的一个程序执行的过程中,各条代码的执行顺序对程序的结果是有直接影响的。 很多时候我们要通过控制代码的执行顺序来实现我们要完

    2024年03月12日
    浏览(42)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(59)
  • JavaScript中的时间日期函数new Date()(JS中5种获取时间戳的函数)

    简介: JavaScript 中的 new Date() 方法用于创建一个新的 Date 对象,该对象表示当前日期和时间。Date 对象提供了许多方法和属性,可以用于获取和设置日期和时间信息。 new Date([year, month, day, hour, minute, second, millisecond]) 其中,每个参数都是可选的。如果没有指定参数,则 new Dat

    2024年02月04日
    浏览(73)
  • JavaScript深浅拷贝

    1. js浅拷贝只是创建了一个新的对象,复制了原有对象的基本类型的值。 手写实现  2. 深拷贝的原理和实现 将一个对象从内存中完整地拷贝出来一份给目标对象,并从堆内存中开辟一个全新的空间存放新的对象,且新对象的修改并不会改变原对象,二者实现真正的分离

    2024年01月18日
    浏览(40)
  • js的鼠标事件(JavaScript的鼠标事件,vue的鼠标事件)

    js鼠标事件,相关属性: vue鼠标事件,相关属性 (js鼠标事件和vue中的鼠标事件区别是省略了on字符):

    2024年02月12日
    浏览(46)
  • 【JavaScript】面试手撕深拷贝

    🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​ 💫个人格言: \\\"如无必要,勿增实体\\\" 上次讲了浅拷贝,这次我们来讲深拷贝。有一说一,深拷贝也算是面试时非常常见的题目了。🐶 深拷贝的作用 首先为什么需要深拷贝,因为浅拷贝无法满足我们对原

    2024年03月13日
    浏览(45)
  • 【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

    lifecycle.js 注解: this.$options.beforeMount.call(this);与 this.$options.beforeMount();有什么区别: call(this)  的作用是将当前对象( this )作为参数传递给  beforeMount  方法,使得在  beforeMount  方法内部可以通过  this  访问到当前对象的上下文 直接调用了  beforeMount  方法,没有指定上下

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包