我正在尝试创建一个函数,它将返回字符串中每个单词的最后一个字母,并认为我很接近,但每当我调用该函数时,我得到一系列数字而不是我要找的字母
这是代码:
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.");
任何建议都将不胜感激。谢谢!
答案 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.");