返回一个字符串,它是连接在一起的所有单词

时间:2017-08-17 20:38:04

标签: javascript arrays for-loop

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

除了有人给我正确的代码之外,如果有人可以分解我做错了什么以及如何正确执行,我真的很感激。提前谢谢!

5 个答案:

答案 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;

}