Javascript 使用jQuery将对象数组转换为另一个对象数组
我在JavaScript文件中得到了一个结果,我想将其转换为另一个对象 我的原始结果Javascript 使用jQuery将对象数组转换为另一个对象数组,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我在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:'V
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}];
需要此方面的帮助如果数组初始化不正确,则需要将外部
()
替换为[]
,如
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结果=[
{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={};
结果。forEach(功能(项目){
map[item.Key1]=map[item.Key1]| |{};
map[item.Key1][item.Key3]=map[item.Key1][item.Key3]| 0;
映射[item.Key1][item.Key3]+=item.Key2;
});
var输出=Object.keys(map).map(函数(值){
var obj={key1:value};
Object.keys(map[value]).forEach(函数(key2){
obj[key2]=map[value][key2]
});
返回obj;
});
控制台日志(输出)代码>这个怎么样
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);
您可以使用array#reduce
根据Key1
值对对象进行分组。然后使用Object.values()
可以获得每个键的累积结果
const input=[{Key1:'Value1',Key2:100,Key3:'A'},{Key1:'Value1',Key2:40,Key3:'B'},{Key1:'Value2',Key2:100,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};
返回r;
},{});
console.log(Object.values(result))代码>Stackoverflow不是一项免费的代码编写服务,因此您可以向我们展示您的尝试,以便我们可以帮助您修复代码。为什么对象是封闭的(
&)
而不是[
&]
@brk,因为他不知道数组文字的外观