我希望模拟任务栏(运行任务/应用程序)。我计划存储类似这样的任务:
(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()
以从这个锯齿状数组中删除正确的元素?
答案 0 :(得分:1)
数组意味着具有数字索引,您可以使用.splice()
从数组中删除数字索引项。非数字索引实际上不在数组中,它们最终只是数组对象的属性,可以使用delete
运算符删除它们。
如果您没有数字索引,那么您应该使用一个对象并使用属性来索引每个项目。这样做时,您可以使用delete tasks[taskName]
从对象中删除属性。
答案 1 :(得分:1)
我建议使用object来存储你的任务,因为它会使你(特定于你的要求,我不是在谈论Array vs Object)代码更清晰,更容易维护
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);