我想存储一组javascript对象。
每个对象代表一个时间,以及与该时间相关的一组属性。例如,这可能是一个计划任务 - 一个任务执行的时间。
我的问题是,在下面的代码中,Scheduler.remove(scheduledTask)
的数据结构和算法是一个不错的选择:
var Scheduler = function()
{
this.sheduledTasks = [];
}
Scheduler.prototype.add = function(scheduledTask)
{
// adds scheduled task, maintaining their order by time. for sake of argument, it could be as simple as this:
this.scheduledTasks.push(scheduledTask);
this.scheduledTasks.sort(function(a, b) {
return a.time - b.time;
});
}
Scheduler.prototype.getNext = function()
{
// returns the scheduledTask with lowest time value
return this.scheduledTasks[0];
}
Scheduler.prototype.remove = function(scheduledTask)
{
// usually called after this.getNext() to remove a handled Task,
// but is not necessarily used to remove a ScheduledTask with the
// lowest time value
}
/**
* ScheduledTask
* @param {number} time
* @param {Task} task
*/
var ScheduledTask = function(time, task){
this.time = time;
this.task = task;
}
var Task = function(/*...*/){
// ...
}
如果要移除scheduler.remove(scheduledTask)
,该如何实施:
第一个问题:对于上面的1和2,它必须维护对象标识到数组索引的映射,因此可以在给定对象的标识的情况下查找索引。
第二个问题:对于上面的2,它需要在给定时间内查找索引。但由于时间是一个浮点,错误可能会蔓延,意味着查找所需的精确值会导致找到错误的(或没有)条目。
如何处理以上问题?
要解决第一个问题,可以为每个新对象分配一个ID,该ID可用于查找它们。有没有一种方法可以让javascript本机化,或者这是否必须自己实现?
但如何解决第二个问题?