javascript - 如何使用下划线的每个函数在嵌套对象中有效地找到一个值?

标签 javascript underscore.js

在我的游戏中,我需要找到包含在“单位”数组中的特定怪物。该数组位于世界对象内的空间单元结构内。如何在不编写丑陋代码的情况下找到这个单元?

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 内部 _.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 不会执行任何操作,因此无需检查。

关于javascript - 如何使用下划线的每个函数在嵌套对象中有效地找到一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008218/

相关文章:

JavaScript : Dynamic Dropdown for Another Hidden Dropdown and Different Option

javascript - 使用本地存储在 Javascript 中撤消、重做

javascript - 通过ajax formData发送图像文件到php

javascript - 如何使用第二个数组中对象的相关属性对对象数组进行排序

javascript - 如何对对象使用 Underscore.js 过滤器?

javascript - Ajax请求cors和cookies步骤

javascript - 使用自定义滚动条进行视差滚动

php - 在 Underscore 模板中格式化日期

javascript - JS 在使用 .push() 时防止重复

javascript - 从 Backbone collection add 更新项目 View