从函数获取未定义

时间:2019-02-23 13:54:52

标签: javascript

Hello编写一个函数,将名称转换为缩写。此kata严格使用两个词,并且两个词之间只有一个空格。 这是我的代码。

function abbrevName(name) {
    var first;
    var last;
    var new1 = name.split("")
    for (var i = 0; i < new1.length; i++) {
        if (new1[i] == new1.toUpperCase) {
            first = new1[i]
            if (new1[i] == new1.toUppercase && first == defined) {
                last = new1[i]
            }
            return first + "." + last;
        }


    }


    /enter code here
}
abbrevName("Faris Abutaya")

我正在获得不确定的帮助,请

3 个答案:

答案 0 :(得分:0)

您正在从函数中获得未定义的信息,因为您需要从中返回一些信息。

尝试在底部附近添加一个return语句,您将获得输出。您实际上需要返回的东西,我会留给您。

function abbrevName(name) {
  var first;
  var last;
  var new1 = name.split('');
  for (var i = 0; i < new1.length; i++) {
    if (new1[i] == new1.toUpperCase) {
      first = new1[i];
      if (new1[i] == new1.toUppercase && first == defined) {
        last = new1[i];
      }
      return first + '.' + last;
    }
  }

  return new1;
}

abbrevName('Faris Abutaya');

答案 1 :(得分:0)

编写的代码有很多错误。

  1. toUppercase是一个函数,应将其作为字符串的方法来调用。因此,第一个 if 语句中的代码将永远不会运行。例如:
    console.log( "h".toUppercase );
    //H
  1. new1 是一个字符数组,您应该为每个字符而不是整个数组调用toUpperCase。

3。您还应该检查是否已定义first。

    function abbrevName(name) {
        var first;
        var last;
        var new1 = name.split("");
        for (var i = 0; i < new1.length; i++) {
            if (new1[i] === new1[i].toUpperCase() && new1[i] != " ") {
                if(first == undefined){
                    first = new1[i];
                }else if (new1[i] == new1[i].toUpperCase() && first != undefined){
                    last = new1[i];
                    return first + "." + last ;
                }
            }
        }
     }
     abbrevName("Faris Abutaya")
     //F.A

-使用RegEx这样做会更好。因为您编写的代码仅在用户输入仅包含2个单词的名称并首字母大写的时间内起作用。

答案 2 :(得分:0)

您的代码中的一些问题在此处的注释中指出:

function abbrevName(name) {
    var first;
    var last;
    var new1 = name.split("")
    for (var i = 0; i < new1.length; i++) {
        if (new1[i] == new1.toUpperCase) {
            first = new1[i]
            // toUpperCase needs `()` to be called; new1 holds the array, not a letter; `== defined` is invalid
            if (new1[i] == new1.toUppercase && first == defined) {
                last = new1[i] // this statement will run as soon as first is found (so last = 'F')
            }
            return first + "." + last; // return happens as soon as first `if` condition is true
        }
    }
}
abbrevName("Faris Abutaya")

这是修订的代码。请注意,console.log语句有助于调试,因为我们可以看到脚本中各个变量的含义。 (要查看浏览器控制台,请使用f12或ctrl + shift + i)

function abbrevName(name) {
  const letters = name.split(""); // Renamed new1 to letters
  let first ="", last = "";
  let firstFound = false, lastFound = false; // New variables
  console.log(letters);
  for (let i = 0; i < letters.length; i++) {
    console.log(letters[i]);
    if(letters[i] == letters[i].toUpperCase()){ //Compare letter to letter, not letter to array
      if(firstFound == false){
        firstFound = true; // Now we have a way to know last is coming
        first = letters[i];
        console.log("first: " + first);
      }
      else{ // firstFound is not false
        lastFound = true          
        last = letters[i];
        console.log("last: " + last);
      }    
    }
  }
  return first + "." + last; // return statement moved out of for loop
}
console.log(abbrevName("Faris Abutaya"));