美文网首页
原生JS实现对象数组深拷贝

原生JS实现对象数组深拷贝

作者: 喜剧之王爱创作 | 来源:发表于2020-03-18 19:57 被阅读0次

原生JS实现对象数组深拷贝已经是一个老生常谈的面试题了,下面我将方法总结出来

//设置一个检查类型的函数
        function checkType(target) {
            return Object.prototype.toString.call(target).slice(8,-1)
        }
//递归遍历对象/数组元素。实现深拷贝
        function clone(target) {
//初始化一个result,作为将来要输出的结果
//我们先检查将要进行拷贝的数据类型是对象还是数组,来进行不同的初始化赋值
            let result
            let  targetType = checkType(target)
            if(targetType === 'Object') {
                result = {}
            }else if (targetType === 'Array') {
                result = []
            }else {
//如果不是对象或者数组就直接我们输出输入的值,因为只有对象或数组才存在深拷贝
               return target
            }
            for( let i in target ) {
                let value = target[i]
//使用for ... in 循环遍历其下标,通过target[i]拿到当前出去迭代中的值
//再通过上面定义的类型检查方法判断每一项的类型
//如果是对象或者数组,接着对该属性进行遍历。如果不是,就将该值赋给result的同一下标下。
                if(checkType(value) === 'Object' || checkType(value) === 'Array') {
                    result[i] = clone(value)
                }else {
                    result[i] = value
                }

            }
//最后输出result,达到深拷贝的目的
            return result
        }

相关文章

网友评论

      本文标题:原生JS实现对象数组深拷贝

      本文链接:https://www.haomeiwen.com/subject/aegcyhtx.html