Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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_Lodash - Fatal编程技术网

javascript合并对象数组,在数组中生成对象值

javascript合并对象数组,在数组中生成对象值,javascript,lodash,Javascript,Lodash,希望合并一个对象数组,从而生成一个具有唯一键的对象和一个值数组。可以复制值。香草JS或洛达斯溶液优先 例-由此: [{ a: 1, b: 2 }, { a: 1, c: 3 }] 为此: { a: [1, 1], b: [2], c: [3] } 可以使用与组合对象: 常量数据=[{a:1,b:2},{a:1,c:3}]; const result={},…data,v1=[],v2=>[…v1,v2]; console.logresult; 可以

希望合并一个对象数组,从而生成一个具有唯一键的对象和一个值数组。可以复制值。香草JS或洛达斯溶液优先

例-由此:

[{ 
  a: 1, 
  b: 2 
}, { 
  a: 1, 
  c: 3 
}]
为此:

{ 
  a: [1, 1],
  b: [2],
  c: [3]
}
可以使用与组合对象:

常量数据=[{a:1,b:2},{a:1,c:3}]; const result={},…data,v1=[],v2=>[…v1,v2]; console.logresult; 可以使用与组合对象:

常量数据=[{a:1,b:2},{a:1,c:3}]; const result={},…data,v1=[],v2=>[…v1,v2]; console.logresult; 无负载灰:

  var t = [{ 
  a: 1, 
  b: 2 
}, { 
  a: 1, 
  c: 3 
}];
var result = {};
debugger;
for(var i=0; i<t.length; i++){
    for(var j in t[i]){
        if(result.hasOwnProperty(j)){
            result[j].push(t[i][j]); 
        }else{
            result[j] = [t[i][j]];
        }
    }
}
console.log(result);
无负载灰:

  var t = [{ 
  a: 1, 
  b: 2 
}, { 
  a: 1, 
  c: 3 
}];
var result = {};
debugger;
for(var i=0; i<t.length; i++){
    for(var j in t[i]){
        if(result.hasOwnProperty(j)){
            result[j].push(t[i][j]); 
        }else{
            result[j] = [t[i][j]];
        }
    }
}
console.log(result);

在堆栈中快速搜索这里可以发现@elclanrs已经为此编写了代码,但是根据注释,它需要一些调整来接受对象数组,所以我对原始代码本身做了一些更改

所以基本上它归结为函数调用:

var merge = function() {
  return [].reduce.call(arguments, function(acc, x) {
  for(i=0;i<x.length;i++){
    Object.keys(x[i]).forEach(function(k) {
      acc[k] = (acc[k]||[]).concat([x[i][k]])
    });
    }
    return acc
  },{})
}
}
下面是一个使用函数调用的片段,我在那篇文章中做了一些小改动:

var x=[{a:1,b:2},{a:1,c:3}] var merge=函数{ 返回[]。reduce.callarguments,functionacc,x{
对于i=0;i在堆栈中快速搜索这里可以发现@elclars已经为此编写了代码,但是根据注释,它需要一些调整来接受对象数组,所以我对原始代码本身做了一些更改

所以基本上它归结为函数调用:

var merge = function() {
  return [].reduce.call(arguments, function(acc, x) {
  for(i=0;i<x.length;i++){
    Object.keys(x[i]).forEach(function(k) {
      acc[k] = (acc[k]||[]).concat([x[i][k]])
    });
    }
    return acc
  },{})
}
}
下面是一个使用函数调用的片段,我在那篇文章中做了一些小改动:

var x=[{a:1,b:2},{a:1,c:3}] var merge=函数{ 返回[]。reduce.callarguments,functionacc,x{ 对于i=0;iES6变量:

常数a=[{ 答:1,, b:2 }, { 答:1,, c:3 }] 常数b=a.reduceacc,cur=>Object.assignacc, …Object.keyscur.mapkey=>{[key]:acc[key]| |[].concatcur[key]} , {} 控制台.logbES6变体:

常数a=[{ 答:1,, b:2 }, { 答:1,, c:3 }] 常数b=a.reduceacc,cur=>Object.assignacc, …Object.keyscur.mapkey=>{[key]:acc[key]| |[].concatcur[key]} , {} console.logb您可以使用wrapped in a使lodashmergeWith将数组视为参数列表。我们使用作为支持函数来连接空对象,以避免更改集合中的对象、集合和合并整个集合的定制器函数。定制器是使用t参数是lodashconcat,它只接受使用的2的arity,第二个参数使用-它删除数组中所有未定义的值

var result = _.spread(_.mergeWith)(
  _.concat({}, data, _.flow(_.ary(_.concat, 2), _.compact))
);
风险值数据=[{ 答:1,, b:2 }, { 答:1,, c:3 }]; var结果=\ u0.spread\ u0.mergeWith _.concat{},数据,u.flow_u.ary_u.concat,2,u.compact ; console.logresult; 您可以使用wrapped in a使lodashmergeWith将数组视为参数列表。我们使用作为支持函数来连接空对象,以避免更改集合中的对象、集合以及合并整个集合的customizer函数。customizer使用组成,其中第一个参数is lodashconcat,它只接受2的arity,第二个参数使用-它删除数组中所有未定义的值

var result = _.spread(_.mergeWith)(
  _.concat({}, data, _.flow(_.ary(_.concat, 2), _.compact))
);
风险值数据=[{ 答:1,, b:2 }, { 答:1,, c:3 }]; var结果=\ u0.spread\ u0.mergeWith _.concat{},数据,u.flow_u.ary_u.concat,2,u.compact ; console.logresult;
@eclanrs在这里已经有了一个答案:@Qiqo There input是单个对象。here OP有对象数组。仍然可以用作merge…array@Tushar。谢谢,为了接受对象数组,我更新了我的答案以反映更改。@eclanrs在这里已经有了一个答案:@Qiqo There input是单个对象。here OP有一个对象数组。仍然可以用作合并…数组。@Tushar。谢谢,为了接受对象数组,我更新了答案以反映更改。哦,您添加了答案。将数组作为合并…x传递。谢谢@Tushar,我更新了答案以反映更改以接受对象数组。哦,您添加了答案。将数组作为合并…x传递。谢谢s@Tushar,为了接受对象数组,我更新了我的答案,以反映这些更改。如果OP想要使用外部库,他/她会这样做。停止为每个小函数加载脚本来混淆web。查看附加到问题的标记。它们包含lodash一词。如果OP想要使用外部库,他/她会这样做e会这样做的。不要再为每个小功能加载脚本来混淆web了。看看附加在问题上的标签。它们包含lodash一词。