美文网首页
浅拷贝和深拷贝与(基本复杂类型)数组去重

浅拷贝和深拷贝与(基本复杂类型)数组去重

作者: 马建阳 | 来源:发表于2018-02-24 17:15 被阅读10次

    对象浅拷贝和深拷贝

    //浅拷贝

    function shallowCopy(oldObj) {
        var newObj = {};
        for(var i in oldObj) {
            if(oldObj.hasOwnProperty(i)) {
                newObj[i] = oldObj[i];
            }
        }
        return newObj;
    }
    

    //深拷贝

    function deepCopy(oldObj) {
        var newObj = {};
        for(var key in oldObj) {
            if(typeof oldObj[key] === 'object') {
                newObj[key] = deepCopy(oldObj[key]);
            }else{
                newObj[key] = oldObj[key];
            }
        }
        return newObj;
    }
    

    所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

    深拷贝的另一种写法

    var obj = {
        name: 'hunger',
        age: 3,
        friends: ['aa', 'bb', 'cc']
    }
    
    var obj2 = JSON.parse(JSON.stringify(obj))
    obj.age = 4
    console.log(obj2.age)
    

    基本类型去重:

    function unique(arr) {
      return arr.filter(function (element, index) {
        return arr.indexOf(element) === index;
      });
    }
    

    基本+复杂类型去重:

    function unique(arr) {
      var hash = {};
      return arr.filter(function (element) {
         var key = JSON.stringify(element);
         return hash.hasOwnProperty(key)?false:(hash[key] = true)
      });
    }
    

    相关文章

      网友评论

          本文标题:浅拷贝和深拷贝与(基本复杂类型)数组去重

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