Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 使用jQuery将对象数组转换为另一个对象数组_Javascript_Jquery_Arrays_Object - Fatal编程技术网

Javascript 使用jQuery将对象数组转换为另一个对象数组

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

我在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}];

需要此方面的帮助如果数组初始化不正确,则需要将外部
()
替换为
[]
,如

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,因为他不知道数组文字的外观