Как объединить сложные объекты 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")
},
};
389   2  

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

    Ничего не найдено.