2015-02-26 2 views
2

Как слить два (или более) JS-объектов, подобных этому?Как объединить сложные объекты 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") 
    }, 
}; 
+0

возможно дубликат [глубокого слияния объектов с AngularJS] (http://stackoverflow.com/questions/17242927/deep- merge-objects-with-angularjs) –

+0

Возможный дубликат [Как можно объединить свойства двух объектов JavaScript динамически?] (http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-of- два-javascript-objects-dynamic) – AeroX

ответ

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)); 

Demos:http://jsfiddle.net/zgbwtp4g/, http://jsfiddle.net/zgbwtp4g/1

+0

Это потрясающая функция. Большое спасибо :) – Hedge

1

Там нет простого способа, но есть различные реализации онлайн, вытекающие из различных библиотек, т.е. lodash merge или jquery extend. Вы можете увидеть их реализацию и реализовать.

Это, кажется, показывает хорошую реализацию: merge

Смежные вопросы