Как объединить сложные объекты 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")
},
};
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
Нет простого способа, но есть различные реализации онлайн, вытекающие из различных библиотек, например lodash merge или jQuery extend. Вы можете увидеть их реализацию и реализовать ее самостоятельно.
Это, кажется, показывает хорошую реализацию: merge
Comments