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.