在Javascript中创建和引用对象数组
Creating and referencing an array of objects in Javascript
我试图创建一个具有任务和子任务的通用待办事项列表。任何给定的To Do列表都有一个或多个任务,每个任务都有一个或多个子任务。对于每个子任务,我将显示显示任务和子任务的卡片,以及关于用户的其他一些相关信息。因此,任何给定列表的卡片数量等于子任务的数量,并且可以按任务进行分类。
对我来说棘手的部分是,我需要能够引用这些卡片(因为我将做一个API调用来获取任务和子任务数据-这两个都是数组,顺便说一下-从不同类型的列表),我不确定引用有效地有2个索引(任务和子任务)的东西的最佳方式。
我的想法一直集中在创建任务的toDoList数组:子任务对象[{task 1, subtask 1}, {task 1, subtask 2}, {task 2, subtask 1), etc}]
-但是当我开始这样做时,我被困在两个地方:
-
以编程方式创建键值对(我使用嵌套循环遍历任务和子任务)
-
如何在以后引用它们,因为我需要将这些任务:子任务对与特定的DOM对象相关联,以执行诸如隐藏它们之类的功能,例如
我有一些代码,但它感觉真的太远了,所以甚至没有包括在这里。基本上,我觉得有一个少于十几行代码的简单解决方案,比我更好的程序员会立即看到,我很感激你的帮助。很多谢谢!
不确定你对写入数据结构有多大的控制权,但也许像这样的东西会起作用。
这里的想法是给所有子任务一个ID,然后通过子任务ID数组跟踪任务的子任务。
var tasks = [
{name: 'clean apartment', subtasks: [1, 2, 3]},
{name: 'do the dishes', subtasks: [6]},
{name: 'eat lunch', subtasks: [4, 5]}
];
var subtasks = [
{name: 'vaccuum', id: 1},
{name: 'dust', id: 2},
{name: 'wipe down', id: 3},
{name: 'make sandwich', id: 4},
{name: 'drink a beer', id: 5},
{name: 'soak pans', id: 6},
];
var i, j, l = tasks.length;
for(i; i < l; i++) {
var task = tasks[i],
ll = task.subtasks.length;
for(j=0; j < ll; j++) {
// Now you know the parent task and all its subtasks
}
}
另外,如果你不介意使用像underscore这样的库的帮助,你可以用相反的方式来做。通过这种方式,您可以为所有任务提供一个ID,然后为子任务提供一个task
字段,将它们映射到一个任务。使用下划线的findWhere
,你可以很容易地查找任务时,迭代每个子任务。
var tasks = [
{name: 'clean apartment', id: 1},
{name: 'do the dishes', id: 2},
{name: 'eat lunch', id: 3}
];
var subtasks = [
{name: 'vaccuum', task: 1},
{name: 'dust', task: 1},
{name: 'wipe down', task: 1},
{name: 'make sandwich', task: 3},
{name: 'drink a beer', task: 2},
{name: 'soak pans', task: 2},
];
for(var i = 0; i < subtasks.length; i++) {
var subtask = subtasks[i],
task = _.findWhere(tasks, {id: subtask.task})
// Now you know the subtask and its task
}
从我的帖子的评论中,我也创建了一个小提琴来给出一个创建子任务卡的例子:http://jsfiddle.net/grammar/ynw0eb25/
这样的结构可以胜任这项工作吗?
[
{taskId: '1',
subtasks:[{subtaskId:'1', otherAttributes:'...'},
{subtaskId:'2', otherAttributes:'...'},
...
]
},
{taskId: '2',
subtasks:[{subtaskId:'1', otherAttributes:'...'},
...
]
}
....
]
- 引用对象中的通用值
- 使用连字符引用对象的属性名称
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- Javascript对象文字,如何使用“this”来引用对象中的变量
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- 如何在ES6中使用Arrow函数引用对象内部的其他函数
- 调用时可以省略引用对象
- 从函数中引用对象时遇到问题 - Adobe Animate canvas
- 在挖空中引用对象构造函数外部视图模型的属性
- 在 JavaScript 中的回调函数中引用对象
- 从充当事件处理程序的多个方法引用对象属性
- 如何引用对象中的其他节点
- 使用 javascript 通过 ID 正确引用对象
- 使用等效的 Object.indexOf 引用对象中的对象的索引
- Javascript - 事件方法中的引用对象
- 如何避免“this”引用 DOM 元素,并引用对象
- 如何按索引引用对象属性
- 在 AngularJs 中引用对象中的数据
- 如何在没有元素的情况下获取文件引用对象
- 为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误