Javascript 如何使用下划线'有效地在嵌套对象中查找值;每个功能是什么?
在我的游戏中,我需要找到一个包含在“单位”数组中的怪物。该阵列位于世界对象内的空间单元结构内。我怎样才能在不写难看的代码的情况下找到这个单元Javascript 如何使用下划线'有效地在嵌套对象中查找值;每个功能是什么?,javascript,underscore.js,Javascript,Underscore.js,在我的游戏中,我需要找到一个包含在“单位”数组中的怪物。该阵列位于世界对象内的空间单元结构内。我怎样才能在不写难看的代码的情况下找到这个单元 var foundUnit = null; _.each(worldHandler.world, function(zone) { if ( foundUnit ) return; _.each(zone, function(cellX) { if ( foundUnit ) return; _.each(cellX, functi
var foundUnit = null;
_.each(worldHandler.world, function(zone) {
if ( foundUnit ) return;
_.each(zone, function(cellX) {
if ( foundUnit ) return;
_.each(cellX, function(cellY) {
if ( foundUnit ) return;
if ( !_.isUndefined(cellY.units) ) {
_.each(cellY.units, function(unit) {
if ( foundUnit ) return;
if ( unit.id === id ) foundUnit = unit;
});
}
});
});
});
return foundUnit;
这里的问题是,当我找到正确的值时,我不能使用return。Return在u3;内返回。each()将继续当前循环。是否有更好/更干净的方法在嵌套对象中查找特定值
示例数据:
{ // World
'1': { // Zone
'-1': { // Cell X
'-1': { // Cell Y
'units': []
},
'0': {
'units': [{id:5}]
},
'1': {
'units': []
}
}
} {
'0': {
'-1': {
'units': []
},
'0': {
'units': []
},
'1': {
'units': []
}
}
} {
'1': {
'-1': {
'units': []
},
'0': {
'units': []
},
'1': {
'units': []
}
}
}
}
查看
\一些
var foundUnit = null;
_.some(worldHandler.world, function(zone) {
return _.some(zone, function(cellX) {
return _.some(cellX, function(cellY) {
return _.some(cellY.units, function(unit) {
if ( unit.id === id ) {foundUnit = unit; return true; }
});
});
});
});
return foundUnit;
请注意,。如果对象为空,则某些对象不会运行,因此无需进行检查。您可以将嵌套结构展平为一个单元数组,然后使用。在其上查找:
var zones = _.flatten(_.map(world, _.values));
var cells = _.flatten(_.map(zones, _.values));
var units = _.flatten(_.map(cells, _.values));
var unit = _.find(units, function(u) { return u.id == 7 });
如果你关注性能,你正在查找单元.ID<代码>,那么你应该考虑建立索引:
var indexById = {};
_.each(units, function(u) {
indexById[u.id] = u;
});
然后您可以进行固定时间查找:var unit=indexbyd[7]代码>请发布您的数据。您可以使用普通的来处理
或来处理
循环中的…)我使用css attrib风格的查询来进行这类查询,您可以像oQuery(worldHandler.world,“[id=123]”)一样调用来查找id为123的单位…@dandavis谢谢,看起来非常有趣!它也有性能吗?@thg435刚刚发布了一些示例数据!