深拷贝的两种方法

2020-11-27  本文已影响0人  Ray_afab
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>深拷贝的两种方法</title>
</head>

<body>
    <script>
        //JSON.stringify 简单粗暴
        var origin_data = { a: 1, b: 2, c: [1, 2, 3] }
        var copy_data = JSON.parse(JSON.stringify(origin_data))
        origin_data.a = 3;
        origin_data.b = 4;
        origin_data.c[0] = '呵呵哒';
        console.log(origin_data)
        console.log(copy_data)

        // 递归
        function deepClone(source) {
            const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
            for (let keys in source) { // 遍历目标
                if (source[keys] && typeof source[keys] === 'object') { // 如果值是对象或者数组,就递归一下
                    targetObj[keys] = deepClone(source[keys]);
                } else { // 如果不是,就直接赋值
                    targetObj[keys] = source[keys];
                }
            }
            return targetObj;
        }
        var origin_data = { a: 1, b: 2, c: [1, 2, 3] }
        var copy_data = deepClone(origin_data)
        origin_data.a = 3;
        origin_data.b = 4;
        origin_data.c[0] = '呵呵哒';

        console.log(origin_data);
        console.log(copy_data);


    </script>
</body>

</html>
上一篇下一篇

猜你喜欢

热点阅读