在Javascript中编辑锯齿状数组

在Javascript中编辑锯齿状数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我希望模拟一个任务栏(运行任务/应用程序)。我计划存储类似以下内容的任务: (function () { var tasks = []; addTask = function (taskName, taskWindow) { if (!tasks[taskName]) { tasks[taskName] = []; } tasks[taskName].push({ taskWindow: taskWindow, taskName: tas

我希望模拟一个任务栏(运行任务/应用程序)。我计划存储类似以下内容的任务:

(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()
从这个锯齿状数组中删除正确的元素?

数组应该具有数字索引,您可以使用
.splice()
从数组中删除数字索引项。非数值索引实际上不在数组中,它们最终只是数组对象上的属性,可以使用
delete
操作符删除它们


如果没有数字索引,那么应该使用对象和属性为每个项编制索引。这样做时,您可以使用
删除任务[taskName]
从对象中删除属性。

我建议使用对象存储任务,因为它将使您的(特定于您的需求,我不是说数组与对象)代码更干净,更易于维护

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);

只需执行一个for循环任务[taskNAME],通过TasKID找到一个,使用ARARY.SPLICE,并关闭这个问题,您可能需要考虑ReBoo.js或MVC的其他框架。你会发现这样做很有帮助。问题是我不再有按名称分组的任务。另外,我在我的原始代码中犯了一个错误,将taskID显示为我将要存储的另一条信息。实际上,它是对任务对话框窗口的引用,而不是一个整数。但我认为你是对的<代码>任务应该是一个具有数组属性的对象。您将其包装在自动执行函数中的意义是什么?我看不出它有什么特别的好处。