首页 > 解决方案 > JavaScript:返回字符串的函数的输出输出“未定义”。为什么?

问题描述

函数“getNameByDate”中的console.log 将产生“Ben”和“Tom”。但是函数之外的其他 console.log 会产生“未定义”。为什么不一样的输出?

  let arr = [
    {
      databaseObject: { geburt: "24.01.2012", name: "Ben"}
    }, 
    {
      databaseObject: { geburt: "29.02.2012", name: "Tom"}
    }, 
  ];

  function getNameByDate(date) {
    jQuery.each( arr, function( i, val ) {         
      if ( val.databaseObject.geburt == date ) {
        console.log (val.databaseObject.name);        
        return val.databaseObject.name;
      }
    });
  }

  let dates = ["24.01.2012", "29.02.2012"];

  jQuery.each( dates, function( i, val ) {
    console.log(getNameByDate(val));
  });

标签: javascriptstring

解决方案


在 jQuery.each-loop 中返回结果是不正确的。相反,我们必须将该循环中的结果分配给一个变量,通过返回 false 来中断循环并在循环之后返回该变量:

 let arr = [
    {
      databaseObject: { geburt: "24.01.2012", name: "Ben"}
    }, 
    {
      databaseObject: { geburt: "29.02.2012", name: "Tom"}
    }, 
  ];

  function getNameByDate(date) {
    var friendsName;
    jQuery.each( arr, function( i, val ) {         
      if ( val.databaseObject.geburt == date ) {
        console.log (val.databaseObject.name);
        friendsName = val.databaseObject.name; 
        return false; // exit loop
      }
    });
    return friendsName;
  }

  let dates = ["24.01.2012", "29.02.2012"];

  jQuery.each( dates, function( i, val ) {
    console.log(getNameByDate(val));
  });

推荐阅读