Если вам не нужно поддерживать порядок, то лучше всего использовать обычный объект и индексировать по идентификатору задачи.Это дает вам O(1)
доступ.
var tasks = {
'2': {
id: 2,
name: 'Random Task',
completed: 0
},
...
}
Если вам также нужно поддерживать порядок, то напишите «класс» OrderedMap, который поддерживает порядок, создав массив идентификаторов задач, но фактические задачи все равно будутхранится в объекте, проиндексированном по идентификатору задачи.По сути, у вас было бы:
// internal API (to help maintain order)
taskIDs = [a, b, c, ..];
// internal API (for actual storage)
tasks = {
a: { .. },
b: { .. },
};
// external API for iterating objects in order
forEach(fn);
// external API for accessing task by ID
get(id);
Внешний мир может не знать о том, как вы поддерживаете порядок, если вы предоставляете хороший инкапсулированный способ их итерации в порядке и доступа к ним по идентификатору задачи.*
Если вам нужна ссылка для реализации такого класса, см. source для LinkedMap из библиотеки Google Closure.