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

オブジェクトを使用してタスクを保存することをお勧めします。これにより、(要件に固有であり、配列とオブジェクトについて話しているわけではありません) コードがよりクリーンになり、保守が容易になります。

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 に答える