javascript合并对象数组,在数组中生成对象值
希望合并一个对象数组,从而生成一个具有唯一键的对象和一个值数组。可以复制值。香草JS或洛达斯溶液优先 例-由此: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; 可以
[{
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一词。