将具有相同属性的两个对象的方法合并到每个属性的数组中
我正在尝试将两个对象的方法合并为一个,以便为父对象中的每个属性生成一个方法数组:
obj1 = {"prop1":"method1","prop2":"method2"} obj2 = {"prop1":"method3","prop2":"method4"}
期望的输出:
obj1 = {"prop1":["method1","method3"],"prop2":["method2","method4"]}
我正在考虑使用$.extend(obj1,obj2)
,但这只是替换值而不创建数组。 这个任务真的可行吗? 如果是这样,这是怎么做到的?
看看这是否有帮助:
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']}
作为比较,您可以使用简单的循环。 以下是更多的类型,但对我来说,理解和维护更容易。 它也是elclanrs的回答速度的两倍 (或Safari的三倍)。
function merge() { var result = {}, obj; for (var i=0, iLen=arguments.length; i
它对于未填充的ES3主机也是安全的,因此应该在每个使用的浏览器中运行。