新的javascript学生在这里寻找一点澄清。我一直遇到涉及For Loops / Arrays的问题。我对诊断自己问题的概念不够熟悉。我刚开始的在线迷你课程示例有限,并且在练习中包含了更复杂的问题(我认为这很棒!我不介意挖掘答案)。我尝试谷歌寻求帮助,但似乎无法找到任何可以解释我做错的事情。如果有人可以看看下面的内容,并了解我犯错误的地点和原因,我真的很感激。
以下是根据以下说明进行的练习:
function wordsToSentence(words) {
// words是一个字符串数组 //返回一个字符串,它是连接在一起的所有单词 //空格需要在每个单词之间 //示例:[' Hello',' world!'] - > ' Hello world!' }
这是我用来满足测试的代码(它一直在失败):
function wordsToSentence(words) {
for (var i = 0; i < words.length; i++) {
words[i] + ' ';
}
return words;
}
除了有人给我正确的代码之外,如果有人可以分解我做错了什么以及如何正确执行,我真的很感激。提前谢谢!
答案 0 :(得分:3)
你实际上并没有添加单词。
首先在变量中声明一个空字符串。这将是您的基本字符串,现在当您循环遍历数组时,请在此字符串中附加空格和单词。然后返回字符串而不是数组。您可以在结尾处使用trim()
来删除在返回字符串之前的结尾或开头的任何多余空格。
function wordsToSentence(words) {
var sentence = ""; //empty string
for (var i = 0; i < words.length; i++) {
sentence += ' ' + words[i]; //add space and word to string
}
return sentence.trim(); //return the string formed
}
console.log(wordsToSentence(['this', 'is', 'a', 'sentence']));
答案 1 :(得分:1)
嗯..你必须得到一些功能;
var arr = ['Hello', 'world!']
res = arr.reduce((p,c) => p + " " + c);
console.log(res);
此处的.reduce()
函数不采用初始值,就像在主题列表的前两个相邻项(此处为arr
)中应用提供的回调函数并将结果存回p
恰好是下一个第一项,并一直持续到列表结尾。 p
代表“前一个”,c
代表当前。
答案 2 :(得分:1)
function wordsToSentence(words) {
for (var i = 0; i < words.length; i++) {
words[i] + ' ';
}
return words;
}
这是你的代码。你在这里做的是通过数组并为每个单词添加一个空格,甚至不分配它。然后返回数组。最好的解决方案是(如评论中所述):
function wordsToSentence(words) {
return words.join(' ');
}
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/join
答案 3 :(得分:1)
words = ["test", "hello", "world"]
function wordsToSentence(words) {
var stringResult = ""; //create an empty string
for (var i = 0; i < words.length; i++) {
stringResult += words[i] + " "; //concatenate using +=, retrieving the value using words[i] and append with a space in the end.
}
return stringResult.trim(); //return the string, with the trim function that strips the last space of it.
}
console.log(wordsToSentence(words));
还有很多其他选择可以解决这个问题:
使用join
- &gt; join使用字符串值将数组部分粘合在一起。
words = ["test", "hello", "world"]
console.log(words.join(", "));
使用reduce
- &gt;方法对累加器和数组中的每个元素(从左到右)应用函数以将其减少为单个值(源MDN)。基本上它使用条件将所有值展平为单个值。在这种情况下一个字符串。
words = ["test", "hello", "world"]
console.log(words.reduce(function(a, b){
return a.concat(" ", b);
}));
现在Array.prototype.forEach
在大多数浏览器中都很常见(因为IE9)。这样就无法使用庞大的for loops
:
words.forEach(function(element){
...
//iterates over every entry in the array. Made available by the argument element.
});
在 emcascript 6 中,使用arrow functions
可以缩短它:
words.forEach( (element) => {...} );
在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
了解有关数组和所有数组方法的更多信息答案 4 :(得分:0)
也许这可以帮到你:
function wordsToSentence(words) {
var words = ['Hello', 'there', 'Javascript!', 'yeah!'];
var concatenated = '';
for (var i = 0; i < words.length; i++) {
concatenated += words[i] + ' ';
}
concatenated = concatenated.slice(0, -1);
return concatenated;
}