返回Object时出错

时间:2014-04-16 19:14:52

标签: javascript function object

我有一个名为ENTITIES的对象数组,以及接收和String 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);

我收到以下错误:未捕获的TypeError:无法读取属性' id'未定义的 它就像getEntityById函数从未真正返回过一个Object。

你能帮助我吗?有线索吗?

2 个答案:

答案 0 :(得分: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];
};

答案 1 :(得分:1)

如果要返回找到的实体,则必须保存它,退出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];
        }
    }
}