是否有更简单(或更有效)的方法来实现以下目标:
var _dataObjects = [{id:0, data:"data0", nextID:1},
{id:1, data:"data1", nextID:2},
{id:2, data:"data2", nextID:3} .. etc.];
generateNextPieceOfData();
function generateNextPieceOfData(){
var len = _dataObjects.length;
for ( var i = 0; i < len; i ++ ) {
var nextDataID = _dataObjects[i].nextID;
var nextData;
for ( var j = 0; j < len; j ++ ) {
if( _dataObjects[j].id == nextDataID ){
nextData = _dataObjects[j].data;
break;
}
}
}
}
以上示例是从我遇到的问题中抽象出来的,我发现在这种情况下ID号是顺序的,但在实际问题中nextID
数字不会按顺序运行。
提前致谢。
答案 0 :(得分:1)
如果您的代码仅按顺序工作,那么您可以按sort
或其他任何方式id
项目,您的代码应该正常工作吗?试试这个:
_dataObjects = _dataObjects.sort(function(a, b) {
return a.id > b.id;
});
答案 1 :(得分:1)
为您的问题使用正确的数据结构。由于您希望按ID查找对象,因此请创建一个哈希映射,其中ID为键,对象为值:
var object_map = {};
for(var i = 0, l = _dataObjects.length; i < l; i++) {
objects[_dataObjects[i].id] = _dataObjects[i];
}
然后获取下一个对象就是:
var next_object = object_map[someObject.nextID];
你仍然有迭代,直到满足一些终端条件。例如:
function generatePath(id_a, id_b) {
var obj = object_map[id_a];
var path = [obj];
while (obj && obj.id !== id_b) {
obj = object_map[obj.nextID];
path.push(obj);
}
return path;
}