如何解决如何对重复对象键天值的数组进行排序并创建一个具有对象坐标的新数组,其中 y 将保存重复值 想法
迭代日期数组以创建具有以下格式的新数组
const dates= [
{datetime:'Monday'},{datetime:'Tuesday'},{datetime:'Wednesday'},{datetime:'Thursday'},{datetime:'Monday'},{datetime:'Friday'},{datetime:'Monday'}]
// Result
result = [ { x: 'Monday',y: 3 },{ x: 'Tuesday',y: 1 },{ x: 'Wednesday',y: 2 },{ x: 'Thursday',{ x: 'Friday',y: 1 } ]
解决方法
您可以按日期分组和计数,然后使用 map
const dates = [
{ datetime: "Monday" },{ datetime: "Tuesday" },{ datetime: "Wednesday" },{ datetime: "Thursday" },{ datetime: "Monday" },{ datetime: "Friday" },];
const groupByDatetime = dates.reduce((acc,el) => {
acc[el.datetime] = (acc[el.datetime] || 0) + 1;
return acc;
},{});
const res = Object.entries(groupByDatetime).map(([datetime,count]) => ({
x: datetime,y: count,}));
console.log(res);
您要实现的目标称为分组。
想法
- 创建一个对象来保存 key(day) 及其计数
- 遍历您的数据并更新计数
- 最后,遍历此对象并创建您需要的最终格式
const dates= [
{datetime:'Monday'},{datetime:'Tuesday'},{datetime:'Wednesday'},{datetime:'Thursday'},{datetime:'Monday'},{datetime:'Friday'},{datetime:'Monday'}]
const map = dates.reduce((map,item) => {
map[ item.datetime ] = (map[ item.datetime ] || 0) + 1
return map
},{});
const result = Object.keys(map).map((key) => ({ x: key,y: map[key] }))
console.log(result)
您还可以使用相对较新的 Array.flat()
方法在一张地图中启用分组和映射。
const dates= [
{datetime:'Monday'},{datetime:'Monday'}
]
dates.map((d1,i) => {
if (i === dates.findIndex(d2 => d2.datetime === d1.datetime)) {
return [{
x: d1.datetime,y: dates.filter(d2 => d2.datetime === d1.datetime).length
}]
} else {
return []
}
})
.flat()
性能肯定比 Array.reduce()
方法差。不过我不确定其他方面的考虑。
您可以使用 Array.reduce
var dates2 = [
{ datetime: 'Monday' },{ datetime: 'Tuesday' },{ datetime: 'Wednesday' },{ datetime: 'Thursday' },{ datetime: 'Monday' },{ datetime: 'Friday' },{ datetime: 'Monday' }
]
var result = dates2.reduce((a,c) => {
let entry = a.find(e => e.x == c.datetime);
if (entry) ++entry.y;
else a.push({
x: c.datetime,y: 1
});
return a;
},[]);
console.log(result );
浏览这些项目,并以 key
作为日期时间构建一个对象。
当相同的日期时间发生时,增加值
const combine = (arr,all = {}) => {
arr.forEach(({ datetime: x }) => ((all[x] ??= { x,y: 0 }).y += 1));
return Object.values(all);
};
const dates = [
{ datetime: "Monday" },];
console.log(combine(dates))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。