基于数组的对象(Javascript)

基于数组的对象(Javascript),javascript,reactjs,Javascript,Reactjs,我正在尝试格式化数据,如下所示: const arr=[{ 日期:“2020-12-18”, 价值:2000 }, { 日期:“2020-12-01”, 价值:2500 }, { 日期:“2020-12-18”, 价值:4000 } ] 对这样的事情: const newObj={ 标签:[“2020-12-01”、“2020-12-18”], 数据:[{ t:“2020-12-01”, y:2500 }, { t:“2020-12-18”, y:6000 } ] } 我试过几次,但都没用,

我正在尝试格式化数据,如下所示:

const arr=[{
日期:“2020-12-18”,
价值:2000
},
{
日期:“2020-12-01”,
价值:2500
},
{
日期:“2020-12-18”,
价值:4000
}
]
对这样的事情:

const newObj={
标签:[“2020-12-01”、“2020-12-18”],
数据:[{
t:“2020-12-01”,
y:2500
},
{
t:“2020-12-18”,
y:6000
}
]
}
我试过几次,但都没用,如果有人能帮我的话。

你可以用

const arr=[{
日期:“2020-12-18”,
价值:2000
},
{
日期:“2020-12-01”,
价值:2500
},
{
日期:“2020-12-18”,
价值:4000
}
]
常量输出=arr.reduce((acc,cur)=>{
如果(!acc[cur.date])acc[cur.date]={t:cur.date,y:cur.value}
else acc[当前日期].y+=当前值
返回acc;
}, {});
常数newObj={
标签:对象键(输出),
数据:对象值(输出)
}
console.log(newObj)您可以使用

首先,创建一个新的贴图对象。使用
array.prototype.forEach()方法遍历数组。将
date
作为键,并使用
Map.prototype.has(key)
方法检查键是否存在。如果key不存在,那么通过调用
Map.prototype.set(key,value)
方法来设置它(在这个解决方案中,value是一个对象)。如果存在键,则使用
Map.prototype.get(key)
方法获取对象,然后更新该对象并将其设置为Map对象。最后,对于label,使用
Map.prototype.keys()
获取所有键;对于data,使用
Map.prototype.values()
方法获取所有值

const arr=[
{
日期:“2020-12-18”,
价值:2000年,
},
{
日期:“2020-12-01”,
价值:2500,
},
{
日期:“2020-12-18”,
价值:4000,
},
];
常量映射=新映射();
arr.forEach((x)=>{
const key=x.date;
如果(地图有(键))
set(key,{…map.get(key),y:map.get(key).y+x.value});
其他的
map.set(键{
t:x.date,
y:x.value,
});
});
常数ret={
标签:[…map.keys()],
数据:[…map.values()],
};

控制台日志(ret)当然!到目前为止,您尝试了什么?我尝试按日期减少()以获得一个新数组,如
newArr[“2020-12-01”,“2020-12-18”]
然后创建一个新对象,并为其提供新属性“label”和值“newArr”,但现在我仍然坚持使用数据属性。我找不到一个方法使它像在例子中一样…我试过了,这正是我需要的。谢谢!我不明白发生的每一件事,但我会学习更多关于
reduce()
的知识来理解itOk我了解了所有我永远不会自己找到的东西lolI从未使用过
new Map()
,但我会了解更多谢谢你的回答。