为什么函数返回未定义?

时间:2020-11-04 02:19:45

标签: javascript arrays function undefined

因此,我最近开始研究如何编写代码,并且我试图弄清楚如何创建一个函数,该函数将接受字符串并在条件满足的情况下将后缀'ay'添加到末尾。由于某种原因,每当我运行该函数时,我都会不断变得“未定义”。我曾尝试重写过几次,但是我总是出错,而且我不知道这是什么!如果有人可以仔细查看并解释我所缺少的内容,我将不胜感激!

function translate(val) {
    let piggy = 'ay'
    let newVal = Array.from(val);
    let finalVal;
    let i = 0;
    while (i < newVal - 1) {
        if (newVal[0] == 'a' || newVal[0] == 'e' || newVal[0] == 'i' || newVal[0] == 'o' || newVal[0] == 'u') {
             finalVal = newVal.join('') + piggy;
             return finalVal;
        } else {
            finalVal = newVal;
            return finalVal;
        }
    i++
    } 
}
translate('apple')

2 个答案:

答案 0 :(得分:0)

一目了然,您将从数组中减去number。这将返回NaN,甚至不会打入while循环。 (x < NaN始终为假)

因为您没有点击while循环,所以该函数只是存在而从不返回任何值。这就是为什么您收到undefined的原因。

如果要遍历新创建的数组,则需要使用newVal.length

固定代码如下:

    let piggy = 'ay'
    let newVal = Array.from(val);
    let finalVal;
    let i = 0;
    while (i < newVal.length - 1) {
        if (newVal[0] == 'a' || newVal[0] == 'e' || newVal[0] == 'i' || newVal[0] == 'o' || newVal[0] == 'u') {
             finalVal = newVal.join('') + piggy;
             return finalVal;
        } else {
            finalVal = newVal;
            return finalVal;
        }
    i++
    } 
}
translate('apple')

答案 1 :(得分:0)

您遗漏了return语句,并且不确定在这里要执行的操作...您是否在尝试将'ay'附加到字符串(如果它以a开头)元音?

如果是,这是您代码的简化版本:

function translate( val ) {
  if([ "a", "e", "i","o","u"].includes(val[0])) {
     return val + 'ay';
     }
   else return val;
}