zoukankan      html  css  js  c++  java
  • js 深拷贝的实现

    在深拷贝递归的时候需要考虑循环应用,可以通过判断一个对象的字段有没有引用这个对象或者任意父级来实现。

    var testObject = {
      'name':  ‘John',
      'age': 24, 
      'testArray': [3, 2, 4, 5],
      'testObject': {
        'attr1': 'value1',
        'attr2': 321,
        'attr3': [1, 2, 3]
      }
    }
    // 测试循环引用
    testObject['testCircularReference'] = testObject
    
    function deepClone(source, parentObject) {
      if (!parentObject) {
        parentObject = []
      }
      if (typeof source !== 'object') {
        return source
      }
      if (parentObject.indexOf(source) >= 0) {
        throw new Error('circular reference')
      } else {
        parentObject.push(source)
      }
      var targetObject = source.constructor === Array ? [] : {}
    
      for (var key in source) {
        if (source.hasOwnProperty(key)) {
          if (typeof source[key] !== 'object') {
            targetObject[key] = source[key]
          } else {
            targetObject[key] = deepClone(source[key], parentObject)
          }
        }
      }
    
      return targetObject
    }
    
    var newObject = deepClone(testObject)
    console.log(newObject.testObject === testObject.testObject)
  • 相关阅读:
    python操作MongoDB(API)
    jQuery插件—validation实现表单校验
    jquery实现下拉列表二级联动
    OSPF配置(H3C)
    OSPF区域
    OSPF路由协议
    直连路由和静态路由
    IP路由原理
    RIP路由协议
    deepin安装VMware workstation
  • 原文地址:https://www.cnblogs.com/mattzh/p/9618192.html
Copyright © 2011-2022 走看看