使用 jQuery 将一个对象数组转换为另一个对象数组
Posted
技术标签:
【中文标题】使用 jQuery 将一个对象数组转换为另一个对象数组【英文标题】:Convert an array of objects to another array of objects using jQuery 【发布时间】:2018-05-08 02:28:05 【问题描述】:我在我的 javascript 文件中得到了一个结果,我想将它转换成另一个对象。
我原来的结果:
results = [Key1:'Value1', Key2:100, Key3:'A',
Key1:'Value1', Key2:40, Key3:'B',
Key1:'Value2', Key2:60, Key3:'A',
Key1:'Value2', Key2:70, Key3:'B',
Key1:'Value3', Key2:50, Key3:'A',
Key1:'Value3', Key2:90, Key3:'B'];
使用 jQuery 或 JavaScript 将其转换为看起来像一个对象数组。我怎样才能做到这一点?
finalResult=[Key1:'Value1', A:100, B:40,
Key1:'Value2', A:60, B:70,
Key1:'Value3', A:50, B:90];
【问题讨论】:
好吧,*** 不是免费的代码编写服务,因此您可以向我们展示您的尝试,以便我们帮助您修复您的代码 为什么用(
&)
而不是[
&]
包围对象
@brk 因为他不知道数组字面量的样子
【参考方案1】:
您可以使用array#reduce
根据Key1
值对对象进行分组。然后使用Object.values()
,就可以得到每个key的累加结果。
const input = [Key1:'Value1',Key2:100,Key3:'A',Key1:'Value1',Key2:40,Key3:'B',Key1:'Value2',Key2:60,Key3:'A',Key1:'Value2',Key2:70,Key3:'B',Key1:'Value3',Key2:50,Key3:'A',Key1:'Value3',Key2:90,Key3:'B'];
const result = input.reduce((r, Key1, Key2, Key3) =>
r[Key1] ?
r[Key1][Key3] = Key2
: r[Key1] = Key1, [Key3] : Key2 ;
return r;
,);
console.log(Object.values(result));
【讨论】:
【参考方案2】:使用这个:
let results=[Key1:'Value1',Key2:100,Key3:'A',
Key1:'Value1',Key2:40,Key3:'B',
Key1:'Value2',Key2:60,Key3:'A',
Key1:'Value2',Key2:70,Key3:'B',
Key1:'Value3',Key2:50,Key3:'A',
Key1:'Value3',Key2:90,Key3:'B'];
let finalResult = [];
for (let original of results)
if (!finalResult[original.Key1])
finalResult[original.Key1] = Key1: original.Key1 ;
finalResult[original.Key1][original.Key3] = original.Key2;
console.log(finalResult);
【讨论】:
【参考方案3】:你初始化数组不正确,需要把外面的()
替换成[]
,比如
var results = [ , ];
你需要先制作一张不同Key1
的地图
var map = ;
results.forEach( function(item)
map[ item.Key1 ] = map[ item.Key1 ] || ;
map[ item.Key1 ][ item.Key3 ] = map[ item.Key1 ][ item.Key3 ] || 0;
map[ item.Key1 ][ item.Key3 ] += item.Key2;
)
现在迭代这个地图的键,并准备你的输出
var output = Object.keys(map).map( function(value)
var obj = key1 : value ;
Object.keys( map[ value ] ).forEach( function(key2)
obj[ key2 ] = map[ value ][ key2 ]
);
return obj;
);
演示
var results=[
Key1:'Value1',Key2:100,Key3:'A',
Key1:'Value1',Key2:40,Key3:'B',
Key1:'Value2',Key2:60,Key3:'A',
Key1:'Value2',Key2:70,Key3:'B',
Key1:'Value3',Key2:50,Key3:'A',
Key1:'Value3',Key2:90,Key3:'B'
];
var map = ;
results.forEach( function(item)
map[ item.Key1 ] = map[ item.Key1 ] || ;
map[ item.Key1 ][ item.Key3 ] = map[ item.Key1 ][ item.Key3 ] || 0;
map[ item.Key1 ][ item.Key3 ] += item.Key2;
);
var output = Object.keys(map).map( function(value)
var obj = key1 : value ;
Object.keys( map[ value ] ).forEach( function(key2)
obj[ key2 ] = map[ value ][ key2 ]
);
return obj;
);
console.log( output );
【讨论】:
以上是关于使用 jQuery 将一个对象数组转换为另一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章
使用map方法将javascript对象数组转换为其他对象数组[重复]