js如何进行多层级的深度拷贝?

需求是这样的,有一个对象a


var a = {

          a: '1',

          b: '2',

          d: {

               q: {

                    r: '3'

                  },

                w: {

                     r: '4'

                  }

             }

         }

然后有一个数组,数组每个子项是在对象a的基础上,多一个a.d的每一个子项,结果这样的


b = [{

       a: '1',

       b: '2',

       c: {

            d: {

                 r: '3'

               }

          }},

      {

        a: '1',

        b: '2',

        c: {

             d: {

                  r: '4'

                }

           }

       }]

这个应该是深度拷贝的问题吧,要怎么实现呢,试了JSON.parse(JSON.stringify())的方法发现行不通,r的值都会是4,求大神帮忙解答下


郎朗坤
浏览 444回答 1
1回答

喵喵时光机

自己用的, 用到underscore的地方可以自己改一下    var COMMON = {};    COMMON.merge = function (target, source, source2) {        if (source && typeof source === 'object') {            if (!target || typeof target !== 'object') {                target = _.isArray(source) ? [] : {};            }            for (var key in source) {                if (source.hasOwnProperty(key)) {                    if (source[key] && typeof source[key] === 'object') {                        if (!target[key] || typeof target[key] !== 'object') {                            target[key] = _.isArray(source[key]) ? [] : {};                        }                        COMMON.merge(target[key], source[key]);                    } else {                        target[key] = source[key];                    }                }            }        }        return (source2 && typeof source2 === 'object') ? COMMON.merge(target, source2) : target;    };    COMMON.clone = function (obj) {        if (obj && typeof obj === 'object') {            if (_.isArray(obj)) {                return _.map(obj, function (item) {                    return COMMON.clone(item);                });            } else {                return COMMON.merge({}, obj);            }        }        return obj;    };
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript