Javascript 方形文本问题寻找循环解决方案

Javascript 方形文本问题寻找循环解决方案,javascript,Javascript,因此,我的任务是把一个字符串作为输入,并将其置乱成一个方码,即“如果人类要留在地面上,上帝会给我们根”返回imtgdvs fearwer Mayogo anouuio ntnnlvt wttddes Aohhn sseoau,其中,新字符串中的每个字母来自将字符串排序为一列,该字符串是正方形的垂直列。即: 伊夫曼瓦斯 梅纳托斯 泰恩特 地滚球 德乌尔达 素食者 斯罗茨 我有一个解决方案,但它是笨重的,如果正方形大于8 x 8,我的解决方案就会崩溃。想要简化,只是还没有逻辑 我的直觉告诉我有一种方

因此,我的任务是把一个字符串作为输入,并将其置乱成一个方码,即“如果人类要留在地面上,上帝会给我们根”返回imtgdvs fearwer Mayogo anouuio ntnnlvt wttddes Aohhn sseoau,其中,新字符串中的每个字母来自将字符串排序为一列,该字符串是正方形的垂直列。即: 伊夫曼瓦斯 梅纳托斯 泰恩特 地滚球 德乌尔达 素食者 斯罗茨

我有一个解决方案,但它是笨重的,如果正方形大于8 x 8,我的解决方案就会崩溃。想要简化,只是还没有逻辑

我的直觉告诉我有一种方法可以循环,但我就是看不到方法

    const squareCode = function(message) {

    let newString = ""
      let string = message.replace(/ /g, "");

    let root =Math.ceil(Math.sqrt(string.length))

    root = Math.round(root)

    for (let i = 0; i < string.length; i ++){
      if (i % root == 0 || i == 0){

        newString += string[i] 

      }  
      } newString += " "
      for (let i = 0; i < string.length; i ++){
      if (i % root == 1  ){
        newString += string[i]
      } 
    } newString += " "
    for (let i = 0; i < string.length; i ++){
     if (i % root ==2){
        newString += string[i]
      }
    }  newString += " "
    for (let i =0; i < string.length; i ++){
      if ( i % root ==3){
        newString += string[i]
      }
    } newString += " "
    for (let i =0; i < string.length; i ++){
      if ( i % root ==4){
        newString += string[i]
      }
    } newString += " "
    for (let i =0; i < string.length; i ++){
      if ( i % root ==5){
        newString += string[i]
      }
    } newString += " "
    for (let i =0; i < string.length; i ++){
      if ( i % root ==6){
        newString += string[i]
      }
    } newString += " "
    for (let i =0; i < string.length; i ++){
      if ( i % root ==7){
        newString += string[i]
      }
    } newString += " "

    return newString
    }

    console.log(squareCode("chill out"));
    console.log(squareCode("feed the dog"));
    console.log(squareCode("have a nice day"));
    console.log(squareCode("if man was meant to stay on the ground god would have given us roots"));
     //my output
     //clu hlt io  
     //fto ehg ee dd
     //hae and via ecy
     //imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau
const squareCode=函数(消息){
让newString=“”
让string=message.replace(//g,“”);
设root=Math.ceil(Math.sqrt(string.length))
root=Math.round(root)
for(设i=0;i

我得到了我想要的东西,我只希望用不到50行的代码来完成它。

一种使用Array#reduce的方法

const squareCode=message=>{
让字符串=message.replace(/\s+/g,“”)。split(“”);
让length=Math.ceil(Math.sqrt(string.length));
返回字符串.reduce((acc,l,i)=>(acc[i%length]+=l,acc),新数组(length.fill(“”)).join(“”);
};
log(squareCode(“冷静”));
console.log(squareCode(“喂狗”));
log(squareCode(“祝您愉快”);

log(squareCode(“如果人注定要呆在地上,上帝会给我们根”)你能写出想要的输出吗?@steppup-这是个问题