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

时间:2015-01-22 02:01:22

标签: javascript arrays string for-loop charat

打印出字符串中所有单词的最后一个字符的简洁方法有哪些。例如,一个像"笑的笑声lol hall bozo" - > "你好"和#34;狗polo boo sudd noob笑脸骑" - >再见。

这些行将返回" 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"

4 个答案:

答案 0 :(得分:2)

不要在循环中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"

答案 1 :(得分:1)

假设单词用空格分隔,您可以在一行中完成:

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^^
}

答案 2 :(得分:0)

另一个干净的解决方案是

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)。

答案 3 :(得分:0)

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

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;
}