打印出字符串中所有单词的最后一个字符

Print out last character of all words in a string

本文关键字:单词 最后一个 字符 字符串 打印      更新时间:2023-09-26
有哪些

干净的方法来打印字符串中所有单词的最后一个字符。例如,像"笑骑哈哈大厅bozo"这样的短语 ->"你好"和"狗马球嘘声突然菜鸟笑脸骑" ->再见。

这些行将返回"1"且未定义。任何帮助都非常感谢。

var decrypt = function (message) {
    var solution = [];
    for (var i = 0; i < message.length; i++) {
        if(message.charAt(i)===" ") {
            return solution.push(message.charAt(i-1));
        };
    };
};
var resulta = decrypt("laugh ride lol hall bozo ")
console.log(resulta); // logs "hello"
var resultb = decrypt("dog polo boo sudd noob smiley ride ")
console.log(resultb); // logs "goodbye"

不要在循环内return,只需将字符附加到结果中即可。循环完成后,返回所需的内容。由于您显然想要返回一个字符串,因此您不需要数组。

var decrypt = function (message) {
    var solution = '';
    for (var i = 0; i < message.length; i++) {
        if(message.charAt(i)===" ") {
            solution += message.charAt(i-1);
        };
    };
    return solution;
};
var resulta = decrypt("laugh ride lol hall bozo ")
console.log(resulta); // logs "hello"
var resultb = decrypt("dog polo boo sudd noob smiley ride ")
console.log(resultb); // logs "goodbye"

假设单词用空格分隔,您可以在一行中执行此操作:

var decrypt = function (message) {
  return (message+" ").match(/'w's/g).join("").replace(/'s/g,"");
}

正则表达式/'w's/g将匹配一个单词字符,后跟一个空格。.match() 方法将返回所有此类匹配项的数组。 .join()会将数组元素连接成一个字符串。然后.replace()将从该字符串中删除空格。

请注意,我正在使用(message+" ")为输入字符串添加额外的空格,以防万一它末尾还没有空格。

此外,我显示的代码不允许包含没有任何"单词字符"的字符串。如果要对此进行测试,则需要两行:

var decrypt = function (message) {
  var m = (message+" ").match(/'w's/g);
  return m ? m.join("").replace(/'s/g,"") : "";
  //include default value for non match here^^
}

另一个干净的解决方案是

var decrypt = function (message) { 
    return message.split(' ')
        .map(function(word) { return word.slice(-1); })
        .join('');
}

这依赖于Array.prototype.map,它是在ES5中添加的,支持所有现代浏览器(http://kangax.github.io/compat-table/es5/#Array.prototype.map)。

考虑到你只关心每个单词的最后一个字符,我会反向循环字符串。这还允许您打印字符串中的最后一个字符,而无需在编码消息的末尾附加空格。

function decrypt(message) {
    var c, secret = '', lastSpace = true;
    for (var i = (message || '').length - 1; i >= 0; i--, lastSpace = c === ' ') {
        c = message.charAt(i);
        if (lastSpace) secret = c + secret;
    }
    return secret;
}