打印出字符串中所有单词的最后一个字符的简洁方法有哪些。例如,一个像"笑的笑声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"
答案 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;
}