函数返回数字而不是字母

时间:2015-11-22 21:38:25

标签: javascript

我正在尝试创建一个函数,它将返回字符串中每个单词的最后一个字母,并认为我很接近,但每当我调用该函数时,我得到一系列数字而不是我要找的字母

这是代码:

function lastLetter(str){
    var arr = [];
    for(var i = 0; i < str.length; i++){
        if(str[i] === " " || str[i] === "."){
            arr.push((i) - 1);
        }

    }
     return arr;
}
lastLetter("I love bacon and eggs.");

任何建议都将不胜感激。谢谢!

5 个答案:

答案 0 :(得分:3)

将值i - 1推送到数组上。你打算推str.charAt(i-1)

arr.push(str.charAt(i - 1));

请参阅:String charAt()

请注意,您的代码并非真正具有防御性。如果字符串中第一个字符有空格或句点,则表示位于-1位置的字符无效。您可以通过从1而不是0循环来解决此问题。在这种情况下,如果字符串以两个空格开头,您仍然会在结果中获得一个空格,但至少您不会收到错误。稍微好一点的算法版本会测试i-1是否为有效索引,以及该位置是否有空格或句点的字符。

下面是一个可能的解决方案,我认为可以解决这些问题,同时在设置代码时仍保留代码结构。

function lastLetter(str){
    var arr = [];
    for(var i = 1; i < str.length; i++){
        var p = str.charAt(i-1);
        var c = str.charAt(i);
        if ( (c === " " || c === ".") &&
            !(p === " " || p === ".") ) {
            arr.push(p);
        }
    }
     return arr;
}

console.log(lastLetter("... Do you love bacon and eggs..."));

答案 1 :(得分:1)

尝试:

arr.push(str[i - 1]);

但是,这会出现多字节字符问题。

答案 2 :(得分:0)

您推送整数值i-1而不是字符str[i-1]

答案 3 :(得分:0)

您正在将索引推送到您的阵列中。您仍然需要访问字符串的i-1 `

` function lastLetter(str){
    var arr = [];
    for(var i = 0; i < str.length; i++){
        if(str[i] === " " || str[i] === "."){
            arr.push(str[(i) - 1]);
        }

    }
     return arr;
}
lastLetter("I love bacon and eggs.");

答案 4 :(得分:0)

下面的解决方案和改进版本:

使用arr.push(str.charAt(i - 1))代替arr.push((i) - 1) (你在哪里保存最后一个字母的位置,但不是它的值 - charAt(position)确实在给定的位置给你后者

charAt()http://www.w3schools.com/jsref/jsref_charat.asp

演示:

function lastLetter(str){
    var arr = [];
    for(var i = 0; i < str.length; i++){
        if(str[i] === " " || str[i] === "."){
            arr.push(str.charAt(i - 1));
        }

    }
     return arr;
}

document.body.innerHTML = lastLetter("I love bacon and eggs.");

改进版本:

function lastLetter(str) {
  var arr = [];
  var words = str.split(/[\s\.?!:]+/)
  for (var i = 0; i < words.length; ++i) {
    if (words[i].length > 0) {
      var lastLetter = words[i].charAt(words[i].length - 1)
      arr.push(lastLetter);
    }
  }
  return arr;
}

document.body.innerHTML = lastLetter("... Is this: correct?! I love bacon and eggs.");