javascript - 基于对象数组中的对象属性组合对象
问题描述
我只想在其中一个属性的基础上合并对象,还想在输出中添加缺少的Days 名称。
Take this for an example:
var array = [
{
"heure1": "14:00",
"heure2": "17:00",
"day": "Sunday",
},
{
"heure1": "08:00",
"heure2": "13:00",
"day": "Sunday",
},
{
"heure1": "14:00",
"heure2": "16:00",
"day": "Monday",
},
{
"heure1": "08:00",
"heure2": "18:00",
"day": "Monday",
},
];
预期结果:
var array = [
{
"heure": ["14:00","17:00","08:00","13:00"],
"day": "Sunday",
},
{
"heure": ["14:00","16:00","08:00","18:00"],
"day": "Monday",
},
{
"heure": [],
"day": "Saturday",
},
{
"heure": [],
"day": "Friday",
},
{
"heure": [],
"day": "Thursday",
},
{
"heure": [],
"day": "Wednesday",
},
{
"heure": [],
"day": "Tuesday",
},
];
我也尝试了一些堆栈溢出的答案,但没有成功:-(一天的顺序无关紧要。提前谢谢。
解决方案
您可以首先为一周中的 7 天创建 7 个条目,每个条目都有一个空数组作为heure
属性。
然后迭代原始数据,查找正确的条目,并将两次推送到heure
数组中。
请注意,您的Day
属性在示例输入(DAY、Day)中有不同的拼写。我强烈建议对此类属性名称使用全部小写。
这是一个实现:
var array = [{"heure1": "14:00","heure2": "17:00","day": "Sunday",}, {"heure1": "08:00","heure2": "13:00","day": "Sunday",}, {"heure1": "14:00","heure2": "16:00","day": "Monday",}, {"heure1": "08:00","heure2": "18:00","day": "Monday", },];
let days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
let obj = Object.fromEntries(days.map(day => [day, { heure: [], day }]));
for (let {heure1, heure2, day} of array) obj[day].heure.push(heure1, heure2);
let result = Object.values(obj);
console.log(result);
推荐阅读
- android - 可以从对话框视图中观察 LiveData 吗?
- flutter - Dart 在一行上声明多个变量
- asp.net - Asp.Net Razor 自定义样式单选列表框
- java - 如何在多个类中抽象出具有不同返回类型的相同方法
- python - Python单例设计模式 - 静态方法与类方法方法
- react-native - 我是否必须制作单独的 MyComponent.android.js 文件才能使用 SafeArea
- android - Android studio 3.4.2 R8 混淆器不混淆类名,只混淆里面的java代码
- tex - 为什么我的 sage 命令的结果变成了问号?
- javascript - Office.js 如何将字符样式应用于选定的单词
- c# - 注销用户 OneDrive API