我有以下对象数组,它们在一个属性上也有一个数组:
const boards = [
{
id: 1,
name: 'Lorem ipsum',
tasks: [
{ id: 42, ... },
{ id: 65, ... },
{ id: 24, ... },
],
},
{
id: 2,
name: 'Lorem ipsum',
tasks: [
{ id: 12, ... },
{ id: 85, ... },
{ id: 14, ... },
],
},
];
我正在寻找最佳和最有效方式来查找task
的索引(当然还有其所在的董事会) 。我想出了以下内容,但我想知道这是否真的是寻找task
时最有效的方式,特别是当你有一个大型数据集时,或者是否有更好的搜索方式?
在我的特殊情况下,不会有很多电路板(大部分时间不超过10个,但可能有数百个任务)
const idToFind = 1;
let boardIndex = null;
let taskIndex = null;
boards.some((board, index) => {
taskIndex = board.tasks.findIndex(task => task.id === idToFind);
// if it has found the task, assign board index and end lookup
if (taskIndex > -1) {
boardIndex = index;
return true;
}
return false;
});
答案 0 :(得分:1)
在boards
:
var taskIds = {
12: 1,
85: 1,
14: 1,
42: 0,
65: 0,
24: 0
};
从那里,找到一个任务和相关的董事会只有O(1)
* 2
使用Lodash的示例:
var taskIds = {};
_.each(boards, function(board, index) {
_.each(board.tasks, function(task) {
taskIds[task.id] = index;
});
});
现在,您可以在固定时间内轻松找到任务索引:
boards[taskIds[65]]