javascript - 使用 javascript 创建累积对象
问题描述
我有一组日期和一组对象。每个都有一个日期属性。我需要按日期对对象进行累积排序。因此,对于日期数组中的每个日期,我想创建一个累积对象,其中每个对象的日期属性都早于日期数组中的日期。
例如下面的日期数组和对象数组:
['2017-11-5', '2018-3-1', '2018-3-22']
[{name: 'Jes', date: '2017-11-2'}, {name: 'Jill', date: '2018-1-5'}, {name: 'Joe', date: '2018-2-25'}, {name: 'Jack', date: '2018-3-21'}]
所需的输出将是:
[{name: 'Jes', date: '2017-11-2'}]
[{name: 'Jes', date: '2017-11-2'}, {name: 'Jill', date: '2018-1-5'}, {name: 'Joe', date: '2018-2-25'}]
[{name: 'Jes', date: '2017-11-2'}, {name: 'Jill', date: '2018-1-5'}, {name: 'Joe', date: '2018-2-25'}, {name: 'Jack', date: '2018-3-21'}]
我试图用大约 500 个日期和 30,000 个对象来做到这一点。
这是当前的代码片段,但由于我正在迭代的对象数量,我遇到了性能问题。
_.each(dtArray,function(i:Date){
let dt = new Date(i);
let filtered = _.filter(data,function(row){
let dtVal = new Date(row['date']);
return dtVal<=dt;
});
解决方案
您可以map()
超过日期,因为您希望每个日期都有一个结果数组。然后在地图中,您可以filter()
根据日期创建该数组的人:
let dates = ['2017-11-5', '2018-3-1', '2018-3-22']
let people = [{name: 'Jes', date: '2017-11-2'}, {name: 'Jill', date: '2018-1-5'}, {name: 'Joe', date: '2018-2-25'}, {name: 'Jack', date: '2018-3-21'}]
let cumul = dates.map(d => people.filter(person => person.date <= d))
console.log(JSON.stringify(cumul, null, 2))
推荐阅读
- firebase-realtime-database - 如何确定与使用量无关的“负载”每日突然出现峰值的原因?
- regex - 第 n 行的正则表达式结束
- cookies - 如何使用 urllib2 在 Python 中单独发送 cookie
- php - 在 Wordpress 简码中添加分类属性
- python - 有人可以向我解释为什么在等于 self.list 的列表上使用 pop() 也会让 self.list pop 排在最后
- sql - 尝试显示与表 3 相关的表 1 的 ID
- http - 如何使用自定义服务在 oauth 期间调试 Rocket Chat 错误?
- bash - 在 shell 脚本中使用带有完整路径名的二进制文件是否被认为是一种好习惯?
- php - preg_replace 在包含重复符号的字符串上
- oracle - 如何解决 Oracle DBMS_SCHEDULER.CREATE_JOB 问题?