【问题标题】:Error returning an Object返回对象时出错
【发布时间】:2014-04-16 19:14:52
【问题描述】:

我有一个名为 ENTITIES 的对象数组以及接收字符串 id 和整个对象数组的以下函数:

function getEntityById(id, ENTITIES) { id = id.toString(); //确保id是字符串

ENTITIES.forEach(function(ENT) {

  if( ENT.name == id ) {
    return( ENT );
  }

}); }

我已经用 console.log 检查了这个函数,它工作正常。 (检查 id 并且 'if' 变为 TRUE)。当我尝试在函数外部访问返回的对象“ENT”时会出现问题,如下所示:

var entity0 = getEntityById('test', ENTITIES); console.log(entity0.id);

我收到以下错误:Uncaught TypeError: Cannot read property 'id' of undefined 就像 getEntityById 函数从来没有真正返回过一个对象。

你们能帮帮我吗?有什么线索吗?

【问题讨论】:

    标签: javascript function object


    【解决方案1】:

    你有这个功能:

    function getEntityById( id, ENTITIES) { 
      id = id.toString(); //made sure id is string
      ENTITIES.forEach(
    

    然后你就有了这个功能

        function( ENT ) {
          if( ENT.name == id ) {
          return( ENT );
        }
    

    返回到你原来的函数:

      }); 
    }
    

    它不做任何事情,所以getEntityById 什么也不返回......所以你得到了未定义。

    你可以做的是:

    function getEntityById( id, ENTITIES) { 
      id = id.toString(); //made sure id is string
      var return_ENT;
      ENTITIES.forEach(function( ENT ) {
        if( ENT.name == id ) {
          return_ENT = ENT;
        }
      }); 
      return return_ENT;
     }
    

    更好的选择可能是使用过滤器:

    function getEntityById( id, ENTITIES) { 
      id = id.toString(); //made sure id is string
      return ENTITIES.filter(function(ent) { return ent.name == id})[0];
    };
    

    【讨论】:

      【解决方案2】:

      如果你想返回找到的实体你必须保存它,退出forEach循环并返回变量:

      function getEntityById(id, ENTITIES) {
          var result = null;
          id = id.toString(); //made sure id is string
          ENTITIES.forEach(function( ENT ) {
              if( ENT.name == id ) {
                  result = ENT;
              }
          });
          return result;
      }
      

      但在这种情况下,您将做一些多余的工作(如果找到所需的实体 - 无需继续循环)。所以我建议这样做:

      function getEntityById(id, ENTITIES) {
          var i = ENTITIES.length;
          while(--i >= 0) {
              if (ENTITIES[i].id === id) {
                  return ENTITIES[i];
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-28
        • 2013-05-07
        • 2016-05-14
        • 2013-01-17
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多