如何在嵌套对象中使用下划线'
How to efficiently find a value inside nested objects using underscore's each function?
在我的游戏中,我需要找到包含在"units"数组中的特定怪物。这个数组位于世界对象的空间单元结构中。如何在不编写丑陋代码的情况下找到这个单元?
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。在_.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': []
}
}
}
}
查看_.some
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;
请注意,如果对象为null,则_.some
no-ops,因此无需检查。
你可以将你的嵌套结构平铺成一个单元数组,然后在上面使用_.find
:
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 });
如果你关心性能并且你正在查找unit.id
,那么你应该考虑建立一个索引:
var indexById = {};
_.each(units, function(u) {
indexById[u.id] = u;
});
var unit = indexById[7];
相关文章:
- 带嵌套json的下划线js查找
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 使用Javascript和下划线循环嵌套对象和数组
- 如果“上一个”为空,则清除下一个嵌套的选择标记
- 下划线分组依据单个方面与嵌套对象属性的比较
- 如何在没有嵌套模板的情况下拥有嵌套路由
- 下划线.js :深度嵌套对象中的匹配字符串
- 如何在不传递回调函数的情况下将嵌套对象属性作为选项传递
- 在.js的嵌套分组上加下划线
- 如何在嵌套对象中使用下划线'
- 嵌套函数调用的下划线_.bind()问题
- 下划线按id获取嵌套项
- 下划线查找嵌套对象
- 使用groupBy下划线分组嵌套列表
- 如何隐藏第三个嵌套列表在这个css下拉嵌套列表
- 下划线不保留嵌套对象上的键
- 在“if”条件下检查嵌套对象的更好方法
- 在带有下划线的嵌套集合中查找对象.js
- 使用下划线_.扩展以避免覆盖嵌套对象
- 使用下划线从嵌套对象(父-子)中获取路径字段值