打印每个单词的第一个字母,然后是第二个字母,然后是第3个字母等

时间:2018-05-05 01:30:21

标签: javascript

对不起,我是javascript的新手

我当前的输出,来自用户输入'多么美好的一天':

what
abea
utif
ulda
y

如何获取每个单词的第一个字母以获得这样的输出:

wauuy hbtl aeid tafa

我试过了:

var output = '';
var counter = 0;
var newStr2 = newStr.split('\n');

  for (let i = 0; i < newStr2.length; i++) {
    output = output + newStr2[counter].substr(0,1)
    counter++
  }

有没有办法可以读取行和列?那样我就可以拿到每一行的第一个字母然后列

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用两个for循环。一个用于单词中的每个字母,一个用于数组的每个元素(没有单词)。

&#13;
&#13;
var newStr = `what
abea
utif
ulda
y`

var output = '';
var newStr2 = newStr.split('\n');

  for(var j = 0; j < newStr2[0].length; j++) {
    for (let i = 0; i < newStr2.length; i++) {
      if(newStr2[i][j]) {
        output = output + newStr2[i][j];
      }      
    }
    output += ' ';
  }
  
  console.log(output);
&#13;
&#13;
&#13;

更新: if条件是检查某个单词是否具有该字符。例如,最后一个单词只包含一个字符(y)。因此,在新输出中,它为其他地方打印undefined。因此,我们检查该单词是否包含该索引中的字符,如果不是忽略。检查以下代码,您将更好地理解。

&#13;
&#13;
var newStr = `what
abea
utif
ulda
y`

var output = '';
var newStr2 = newStr.split('\n');

  for(var j = 0; j < newStr2[0].length; j++) {
    for (let i = 0; i < newStr2.length; i++) {
      output = output + newStr2[i][j];
    }
    output += ' ';
  }
  
  console.log(output);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用正则表达式将输入的每个第4个字符(无空间)拆分为数组,然后使用reduce将它们组合在一起:

&#13;
&#13;
function transform(input) {
  const wordCount = input.split(' ').length;
  const chunked = input.replace(/ /g, '')
  .match(new RegExp('\\w{1,' + wordCount + '}', 'g'));
  const output = chunked.reduce((accum, chunkWord) => {
    [...chunkWord].forEach((char, i) => (
      accum[i] = (accum[i] || '') + char
    ));
    return accum;
  }, {});
  return output;
}

console.log(transform('what a beautiful day'));
console.log(transform('foo foo bar bar'));
console.log(transform('fooo bar baz'));
&#13;
&#13;
&#13;