Fusionner les méthodes de deux objects ayant les mêmes propriétés dans un tableau pour chaque propriété

J’essaie de fusionner les méthodes de deux objects en un seul afin d’obtenir un tableau de méthodes pour chaque propriété de l’object parent:

obj1 = {"prop1":"method1","prop2":"method2"} obj2 = {"prop1":"method3","prop2":"method4"} 

Sortie désirée:

 obj1 = {"prop1":["method1","method3"],"prop2":["method2","method4"]} 

Je pensais utiliser $.extend(obj1,obj2) , mais cela ne fait que remplacer des valeurs et ne crée pas de tableau. Cette tâche est-elle réellement possible? Si oui, comment cela se fait-il?

Voir si cela aide:

 var merge = function(/*...objs*/) { return [].reduce.call(arguments, function(acc, x) { Object.keys(x).forEach(function(k) { acc[k] = (acc[k]||[]).concat([x[k]]) }) return acc },{}) } var obj1 = {prop1: "method1", prop2: "method2"} var obj2 = {prop1: "method3", prop2: "method4"} console.log(merge(obj1, obj2)) //^ // {prop1: ['method1', 'method3'], // prop2: ['method2', 'method4']} 

À titre de comparaison, vous pouvez utiliser des boucles simples. Ce qui suit est un peu plus compliqué à taper, mais pour moi, il est beaucoup plus facile à comprendre et à maintenir. Il fonctionne également deux fois plus vite (ou trois fois plus vite dans Safari) que la réponse de elclanrs.

 function merge() { var result = {}, obj; for (var i=0, iLen=arguments.length; i 

Il est également sûr pour les hôtes ES3 non polyfilled, il devrait donc être exécuté dans tous les navigateurs utilisés.