如何合并复杂的JS对象

时间:2015-02-26 11:34:30

标签: javascript

如何合并这样的两个(或更多)JS对象?

结果应包含所有函数(如showUser和showOtherData),并且事件和请求数组也应该合并。

var object1 = {
  events: {
    'app.activated': 'showUser'
  },
  requests: {
  },
  showUser: function() {
    console.log("es jhsod")
  },
};

var object2 = {
  events: {
    'app.destroyed': 'hideUser'
  },

  requests: {
    main: {
      url: 'http://example/api/main',
      data: {
        format: 'json'  
      }
    }
  },

  showOtherData: function() {
    console.log("foobar")
  },
};

2 个答案:

答案 0 :(得分:2)

我知道已经有一些实现,但编写递归函数非常有趣。再针对您的问题再检查extend函数。它还支持无限数量的参数:

function extend() {

    var result = {}, obj;

    for (var i = 0; i < arguments.length; i++) {
        obj = arguments[i];
        for (var key in obj) {
            if (Object.prototype.toString.call(obj[key]) === '[object Object]') {
                if (typeof result[key] === 'undefined') {
                    result[key] = {};
                }
                result[key] = extend(result[key], obj[key]);
            } 
            else {
                result[key] = obj[key];
            }
        }
    }
    return result;
}

console.log(extend(object1, object2, object3));

演示: http://jsfiddle.net/zgbwtp4g/http://jsfiddle.net/zgbwtp4g/1

答案 1 :(得分:1)

没有简单的方法,但是不同的库存在各种在线实现,即lodash mergejquery extend。您可以看到这些实现并自行实现。

这似乎显示了一个很好的实现:merge