Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将具有相同属性的两个对象的方法合并到每个属性的数组中_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript 将具有相同属性的两个对象的方法合并到每个属性的数组中

Javascript 将具有相同属性的两个对象的方法合并到每个属性的数组中,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在尝试将两个对象的方法合并为一个,以便为父对象中的每个属性生成一个方法数组: obj1 = {"prop1":"method1","prop2":"method2"} obj2 = {"prop1":"method3","prop2":"method4"} 期望输出: obj1 = {"prop1":["method1","method3"],"prop2":["method2","method4"]} 我曾考虑使用$.extend(obj1,obj2),但这只是替换值,并不创建数组。这

我正在尝试将两个对象的方法合并为一个,以便为父对象中的每个属性生成一个方法数组:

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']}

作为比较,您可以使用简单的循环。下面的内容更容易输入,但对我来说,更容易理解和维护。它的运行速度也是埃尔克兰斯答案的三倍(在Safari中是三倍)

function merge() {
  var result = {},
      obj;

  for (var i=0, iLen=arguments.length; i<iLen; i++) {
    obj = arguments[i];

    for (var p in obj) {

      if (obj.hasOwnProperty(p)) {

        if (!result.hasOwnProperty(p)) {
          result[p] = [];
        }
        result[p].push(obj[p]);
      } 
    }
  } 
  return result;
}
函数合并(){
var result={},
obj;

对于(var i=0,iLen=arguments.length;iI,我更喜欢这一个,并且受到elchranrs answer的启发,想出了这样的答案。感谢您的建议!如果不是返回数组作为值,而是返回字符串,那么代码应该是什么呢?我的意思是:
{prop1:'method1,method3',prop2:'method2,method4'
???