我有一个javascript对象(来自PHP的json响应),它构建如下:
0: {hour: "0", id: "1", job: "A", position: "0"}
1: {hour: "2", id: "2", job: "B", position: "1"}
2: {hour: "3", id: "3", job: "C", position: "2"}
3: {hour: "4", id: "4", job: "D", position: "3"}
现在我选择一个随机的 ID 和一个 DATE TIME 让我们说 2 和 2015-01-01 12:00
解决方案输出应为:
Job: A, Date: 2015-01-01 10:00 //-2h (hours from Job B) minus from previous ID Date
Job: B, Date: 2015-01-01 12:00 //selected ID
Job: C, Date: 2015-01-01 15:00 //+3h hours add to last ID Date
Job: D, Date: 2015-01-01 19:00 //+4h hours add to last ID Date
到目前为止,这是我的代码:
var sel_date = moment([2015,00,01,12,00]);
var sel_id = '2';
var sel_object = jQuery.grep(e, function(n,i){
return n.id === sel_id;
});
var sel_position = sel_object[0].position;
var job = [];
var date = [];
var add_date = sel_date;
$.each(e,function(key, value){
job.push(value.job);
if (value.position != sel_position){
if (value.position > sel_position){
add_date = moment(add_date).add(Number(value.hour), 'hours').format('YYYY-MM-DD HH:mm');
date.push(add_date);
} else {
date.push(moment(sel_date).subtract(Number(value.hour), 'hours').format('YYYY-MM-DD HH:mm'));
}
} else {
date.push(moment(sel_date).format('YYYY-MM-DD HH:mm'));
}
})
问题是较小的位置 B,C,D 有效,但当位置较小时,我需要来自即将到来的循环的 value.hour 。我应该在循环中运行第二个循环吗?想不出一个好方法。
答案 0 :(得分:0)
抱歉可以“轻松”自己修复它。我只是使用对象 e 并从那里获得一个位置向前的值。
return mongoose.model('Submission')
.aggregate([
{ $match: { client: { $in: clientIds }, admin: this._admin._id } },
{ $sort: { client: 1, submitted: -1 } },
{ $group: {
_id: '$client',
lastSubmitted: { $first: '$submitted' },
timezone: { $first: '$timezone' },
} },
])
.exec();
干杯 汉纳斯