zoukankan      html  css  js  c++  java
  • javascript中对数组对象的深度拷贝

    在前端开发的某些逻辑中,经常需要对现有的js对象创建副本,避免污染原始数据的情况。

    如果是简单的一维数组对象,可以使用两个原生方法:

    1、splice

    var arr1 = ['a', 'b', 'c'];
    var arr2 = arr1.splice(0);
    console.info(arr1);
    arr2[1] = 'x';
    console.info(arr1);

    2、concat

    var arr1 = ['a', 'b', 'c'];
    var arr2 = [].concat(arr1);
    console.info(arr1);
    arr2[1] = 'x';
    console.info(arr1);

    那如果是多层级的数组对象,再用上面的两个方法就有问题了

    虽然最上层会创建副本,但每层下面的数据还是会引用原来的对象

    对于这种情况,可以利用jquery的extend方法进行深度拷贝:

    3、$.extend

    var arr1 = [
        { 'id': 1, 'name': 'a' },
        { 'id': 2, 'name': 'b' },
        { 'id': 3, 'name': 'c' }
    ]
    var arr2 = $.extend(true, {}, arr1);
    console.info(arr1);
    arr2[1].name = 'x';
    console.info(arr1);

    另外,$.extend也能对任何js对象创建深度拷贝,需要注意的是第一个参数要传入true,否则只是拷贝第一层属性

    其实在实际开发中,$.extend还可以做的更多

  • 相关阅读:
    RS485通信和Modbus协议(转)
    Modbus通讯错误检测方法
    Modbus消息帧
    Modbus通讯两种传输方式
    echarts自定义图例legend文字和样式
    host文件的作用
    webpack --watch和supervisor的不同
    vue中如何使用echarts
    Vue父子组件生命周期
    Git总结笔记
  • 原文地址:https://www.cnblogs.com/netWild/p/9033787.html
Copyright © 2011-2022 走看看