干净的方法来打印字符串中所有单词的最后一个字符。例如,像"笑骑哈哈大厅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(/ws/g).join("").replace(/s/g,"");
}
正则表达式/ws/g
将匹配一个单词字符,后跟一个空格。.match()
方法将返回所有此类匹配项的数组。 .join()
会将数组元素连接成一个字符串。然后.replace()
将从该字符串中删除空格。
请注意,我正在使用(message+" ")
为输入字符串添加额外的空格,以防万一它末尾还没有空格。
此外,我显示的代码不允许包含没有任何"单词字符"的字符串。如果要对此进行测试,则需要两行:
var decrypt = function (message) {
var m = (message+" ").match(/ws/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;
}