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;
    }
  • 相关阅读:
    文件的权限
    正则表达式
    软硬链接的学习
    linux系统中的文件类型和扩展名
    把数组排成最小的数
    整数中1出现的次数(从1到n整数中1出现的次数)
    最小的K个数
    连续子数组的最大和
    数组中出现次数超过一半的数字
    字符串的排列
  • 原文地址:https://www.cnblogs.com/chao202426/p/12836740.html
Copyright © 2011-2022 走看看