面试高频考点——深拷贝的实现方式

136 阅读1分钟

面试中我们经常会被问到有没有用过深拷贝,它的实现方式是什么,为此我专门归纳了几种方式。

1.JSON.parse(JSON.stringfy())

let a = {
  name:'张三',
  age:20,
  gender:'男'
}
b = JSON.parse(JSON.stringfy(a))
b.name='李四'
b.age=25
b.gender='女'
console.log(b)  // {name:'李四',age:25,gender:'女'}

2.递归

<script>
         function deepCopy(obj) {
            let result = Array.isArray(obj) ? [] : {};
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    if (typeof obj[key] === 'object' && obj[key] !== null) {
                        result[key] = deepCopy(obj[key]);
                    } else {
                        result[key] = obj[key];
                    }
                }
            }
            return result;
        }
        let a={name:'张三',age:22,gender:'男'}
        console.log(deepCopy(a));  //{name:'张三',age:22,gender:'男'}
      </script>

3.JQ的extend方法

<script src="./jquery-1.12.4.js"></script>
    <script>
         let a = [0, 1, [2, 3], 4]
         b = $.extend(true, [], a)
             a[0] = 1
             a[1]=2
             a[2][0] = 3
             a[2][1]=4
             a[3]=5
            
             console.log(a, b);
    </script>

打印结果如下:

r.png

4. lodash工具库

1.下包npm i --save lodash

2.使用

  import _ from 'lodash
  
  const a = { name: '张三', age: 20 }
  const b = _.cloneDeep(a)
  console.log('b', b)    // { name: '张三', age: 20 }