0

我希望模拟一个任务栏(正在运行的任务/应用程序)。我计划存储这样的任务:

(function ()
{
    var tasks = [];

    addTask = function (taskName, taskWindow)
    {
        if (!tasks[taskName]) { tasks[taskName] = []; }
        tasks[taskName].push({ taskWindow: taskWindow, taskName: taskName});
    };
    removeTask = function (taskName, taskWindow)
    {
        if (tasks[taskName])
        {
            //Somehow remove the object from the array
        }        
    };
}());

我应该如何编写removeTask()以从这个锯齿状数组中删除正确的元素?

4

2 回答 2

1

数组意味着具有数字索引,您可以使用.splice()它从数组中删除数字索引项。非数字索引实际上并不在数组中,它们最终只是数组对象的属性,并且可以使用delete运算符将​​其删除。

如果您没有数字索引,那么您应该使用一个对象并使用一个属性来索引每个项目。这样做时,您可以使用delete tasks[taskName]从对象中删除属性。

于 2013-02-16T05:42:23.847 回答
1

我建议使用对象来存储您的任务,因为它会使您的(特定于您的要求,我不是在谈论数组 vs 对象)代码更清洁且更易于维护

var taskManager = (function(){
    function taskManager(tasks){
      // Do your tasks validation before passing to this.
      var this.tasks = tasks || {}; // tasks value is not private here         
    }
    // Assuming taskID would be unique value
    taskManager.prototype.addTask = function (taskName, taskID){
       if ( !this.tasks[taskID] ) {
          this.tasks[taskID] = { taskID: taskID, taskName: taskName }; 
       }
    };
    taskManager.prototype.removeTask = function (taskName, taskID){
      if (this.tasks[taskID]){
        delete this.tasks[taskID];
      }        
    };
    return taskManager;
})();

用法:

var taskManager1 = new taskManager();
taskManager1.addTask(a,b);
taskManager1.removeTask(a);
于 2013-02-16T06:02:38.917 回答