Javascript 将对象数组转换为具有按键名分组的属性值的对象

Javascript 将对象数组转换为具有按键名分组的属性值的对象,javascript,arrays,Javascript,Arrays,如果我们在输入数据中有更多的对象,如何动态地执行它 我有一个数据集数组,里面有多个对象,对象可以是任意数量。 我必须把这个数据转换成newDataset对象,里面有动态数组,这个数组依赖于dataset数组的对象。如果我们已经知道数据集数组的对象的数量,我就这样做了。例如:见下文 //输入数据具有更多动态对象。 变量数据集=[ { 日期:“2020年1月1日”, 数据1:44, 数据2:40, }, { 日期:“2020年1月2日”, 数据1:37, 数据2:60,, }, { 日期:“202

如果我们在输入数据中有更多的对象,如何动态地执行它

我有一个数据集数组,里面有多个对象,对象可以是任意数量。 我必须把这个数据转换成newDataset对象,里面有动态数组,这个数组依赖于dataset数组的对象。如果我们已经知道数据集数组的对象的数量,我就这样做了。例如:见下文

//输入数据具有更多动态对象。
变量数据集=[
{
日期:“2020年1月1日”,
数据1:44,
数据2:40,
},
{
日期:“2020年1月2日”,
数据1:37,
数据2:60,,
},
{
日期:“2020年1月3日”,
数据1:75,
数据2:90,,
},
];
var newDataset={};
////输出数据应采用这种形式。
//var newDataset={
//日期:[“2020年1月1日”、“2020年1月2日”、“2020年1月3日”],
//数据1:[44,37,75],,
//数据2:[40,60,90],,
// };
//把你的代码写在下面
var日期=[];
VarData1=[];
VarData2=[];
对于(var i=0;i//代码末尾
以下内容似乎是动态工作的:

const src=[{日期:“2020年1月1日”,数据1:44,数据2:40,},{日期:“2020年1月2日”,数据1:37,数据2:60,},{日期:“2020年1月3日”,数据1:75,数据2:90,},],
重建=arr=>
arr.reduce((r,o)=>(
Object.keys(o).forEach(key=>(
!r[key]&&(r[key]=[]),
r[键]。按(o[键])
)), 
R
), {})
console.log(重建(src))

。作为控制台包装{min height:100%;}
您可以使用
映射
对象

var数据集=[
{日期:“2020年1月1日”,数据1:44,数据2:40},
{日期:“2020年1月2日”,数据1:37,数据2:60},
{日期:“2020年1月3日”,数据1:75,数据2:90}
];
const myMap=新映射();
dataset.forEach(obj=>{
Object.entries(obj.forEach)([k,v])=>{
myMap.has(k)?myMap.get(k).push(v):myMap.set(k,[v]);
})
});
log(Object.fromEntries(myMap.entries())

.as console wrapper{min height:100%!important;top:0;}
虽然您已经接受了答案,但这里我为您提供了一个更抽象的解决方案。比如说,如果
数据集
中的对象没有严格的结构,这意味着其中一些对象可能具有您在
新数据集
中不需要的属性,该怎么办。 以下解决方案使您能够根据需要过滤属性

const数据集=[
{日期:“2020年1月1日”,数据1:44,数据2:40},
{日期:“2020年1月2日”,数据1:37,数据2:60},
{日期:“2020年1月3日”,数据1:75,数据2:90,不必要的:9393},
];
const newDataset={date:[],data1:[],data2:[]}//如果您只需要这3个属性。
const createNewDataset=(givenDataset)=>
减少(
(建筑物,当前)=>(
Object.entries(当前).forEach(
([key,value])=>(Array.isArray(builOn[key])?builOn[key].push(value):null)
),
比隆
),
新数据集
);

log(createNewDataset(dataSet))这个答案对初学者来说容易多了。删除不必要的项是可行的,但对于更多的数据项来说它不是动态的。你是说在
数据集的
对象中有更多属性?实际上,解决这个问题不应该有灵丹妙药。