Joo*_*rts 1 javascript momentjs
所以我有一组特殊的数据:
data: [
['2022-01-17T16:29:24', 30], // these below would aggregate to 210
['2022-01-17T17:37:24', 30],
['2022-01-17T17:41:40', 30],
['2022-01-17T17:41:48', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:29', 30],
['2022-01-12T12:50:18', 30], // these below would aggregate to 90
['2022-01-12T12:50:18', 30],
['2022-01-12T12:50:29', 30]
]
Run Code Online (Sandbox Code Playgroud)
我需要将其减少为周数据集。我会将日期转换为一周的开始以获取周数据moment(day).startOf('isoWeek'),然后将相似日期的数据连接起来并将其减少为单个条目。
最终结果如下:
data: [
['2022-01-17T00:00:00', 210],
['2022-01-10T00:00:00', 90]
]
Run Code Online (Sandbox Code Playgroud)
但我正在寻找如何使用的建议.reduce()或任何其他更现代的解决方案,这些解决方案将在大型设备上发挥作用。现在我为此嵌套了 for 循环(除了看起来很糟糕之外)可能性能很差,因为它在同一个数组上迭代多次。一项要求是moment应该用于日期操作,请尽量避免使用Dateobj。
现在我有这样的事情:
data: [
['2022-01-17T16:29:24', 30], // these below would aggregate to 210
['2022-01-17T17:37:24', 30],
['2022-01-17T17:41:40', 30],
['2022-01-17T17:41:48', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:29', 30],
['2022-01-12T12:50:18', 30], // these below would aggregate to 90
['2022-01-12T12:50:18', 30],
['2022-01-12T12:50:29', 30]
]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用reduce 来解决它,但结果将是一个对象。像这样:
const moment = require("moment")
var x = [
['2022-01-17T16:29:24', 30],
['2022-01-17T17:37:24', 30],
['2022-01-17T17:41:40', 30],
['2022-01-17T17:41:48', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:18', 30],
['2022-01-21T12:50:29', 30],
['2022-01-12T12:50:18', 30],
['2022-01-12T12:50:18', 30],
['2022-01-12T12:50:29', 30]
]
// solution
var y = x.reduce((a,b) => {
const key = moment(b[0]).startOf("isoWeek").format()
a[key] = a[key]? a[key]+b[1]: b[1]
return a
}, {})
console.log(y)
Run Code Online (Sandbox Code Playgroud)
输出:
{
"2022-01-17T00:00:00+07:00": 210,
"2022-01-10T00:00:00+07:00": 90
}
Run Code Online (Sandbox Code Playgroud)
但如果您希望它像您一样作为数组,我们可以通过以下方式将其转换:
{
"2022-01-17T00:00:00+07:00": 210,
"2022-01-10T00:00:00+07:00": 90
}
Run Code Online (Sandbox Code Playgroud)
输出:
[
[ '2022-01-17T00:00:00+07:00', 210 ],
[ '2022-01-10T00:00:00+07:00', 90 ]
]
Run Code Online (Sandbox Code Playgroud)
虽然这不是最好的解决方案,但我认为它比嵌套循环更具可读性。
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |