zoukankan      html  css  js  c++  java
  • 深浅拷贝

    数组的浅拷贝:

    可以利用数组的一些方法,比如:slice、concat返回一个新数组的特性俩实现拷贝

    var arr = [{old: 'old'}, ['old']];
    
    var new_arr = arr.concat();
    
    arr[0].old = 'new';
    arr[1][0] = 'new';
    
    console.log(arr) // [{old: 'new'}, ['new']]
    console.log(new_arr) // [{old: 'new'}, ['new']]

    使用concat和slice是一种浅拷贝

    数组的深拷贝:

    var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}]
    
    var new_arr = JSON.parse( JSON.stringify(arr) );
    
    console.log(new_arr);

    不仅使用于数组,还适用于对象,但是不能拷贝函数

    浅拷贝的实现:

    var shallowCopy = function(obj) {
        // 只拷贝对象
        if (typeof obj !== 'object') return;
        // 根据obj的类型判断是新建一个数组还是对象
        var newObj = obj instanceof Array ? [] : {};
        // 遍历obj,并且判断是obj的属性才拷贝
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = obj[key];
            }
        }
        return newObj;

    深拷贝的实现:

    var deepCopy = function(obj) {
        if (typeof obj !== 'object') return;
        var newObj = obj instanceof Array ? [] : {};
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
            }
        }
        return newObj;
    }
  • 相关阅读:
    Java正则表达式, 提取双引号中间的部分
    如何快速找到未知长度单链表的中心点的值
    西格玛
    对数
    jquery显示隐藏toggle
    JavaScript:改变li前缀图片和样式
    jquery点击改变图片src源码并toggle
    jquery点击改变class并toggle
    linux下合并两个文件夹
    编译安装httpd
  • 原文地址:https://www.cnblogs.com/chao202426/p/12836740.html
Copyright © 2011-2022 走看看