本文将介绍如何在 JavaScript 中,针对一个包含日期和时间信息的对象,将特定元素从数组中取出并移动到另一个数组,同时避免修改原始数据。我们将通过 Object.values()、flat() 和 reduce() 方法来实现这一目标,确保数据的完整性和可维护性。
核心思路是将对象的所有值(即数组)提取出来,然后将这些数组扁平化为一个单一的数组。最后,使用 reduce() 方法,根据每个对象的 day 属性,将它们重新组合成一个新的对象。这样,原始对象就不会被修改。
假设我们有以下数据结构:
const days = {
"monday": [{
"day": "monday",
"type": "open",
"value": 43200
},
{
"day": "monday",
"type": "close",
"value": 75600
}
],
"tuesday": [{
"day": "tuesday",
"type": "open",
"value": 43200
},
{
"day": "tuesday",
"type": "close",
"value": 75600
}
],
"wednesday": [{
"day": "wednesday",
"type": "open",
"value": 43200
},
{
"day": "wednesday",
"type": "close",
"value": 75600
}
],
"thursday": [{
"day": "thursday",
"type": "open",
"value": 43200
},
{
"day": "thursday",
"type": "close",
"value": 75600
}
],
"friday": [{
"day": "friday",
"type": "open",
"value": 36000
}],
"saturday": [{
"day": "friday",
"type": "close",
"value": 3600
},
{
"day": "saturday",
"type": "open",
"value": 36000
}
],
"sunday": [{
"day": "saturday",
"type": "close",
"value": 3600
},
{
"day": "sunday",
"type": "open",
"value": 43200
},
{
"day": "sunday",
"type": "close",
"value": 75600
}
]
}
const result = Object.values(days).flat().reduce((acc, o) => {
(acc[o.day] ??= []).push(o);
return acc;
}, {});
console.log(result);
是一个空对象 {}。通过使用 Object.values()、flat() 和 reduce() 方法,我们可以高效且安全地将数组中的元素移动到另一个数组,同时保持数据的不可变性。这种方法在处理复杂数据结构时非常有用,可以提高代码的可维护性和可读性。