【问题标题】:Split string into 2 chars per array element for n length then 1 char for remaining elements in JavaScript将字符串拆分为每个数组元素 2 个字符,长度为 n,然后 1 个字符用于 JavaScript 中的剩余元素
【发布时间】:2020-09-09 13:30:47
【问题描述】:

我有一个字符串(输入),后来转换成一个数组(结果)。数组的大小取决于所需的瓦片数量(tilesNeeded)。下面的示例由一个 11 个字符的字符串组成。在这种情况下,需要 8 个图块。以下代码输出:

["I", " ", "l", "i", "k", "e", " ", "dogs"]

数组的每个元素代表一个图块。所以“I”是它自己的图块,“”是一个图块,“l”是一个图块,等等。我想循环遍历字符串并在每个元素中放置 2 个字符,而不是数组中的最后一个元素是“狗”元素,直到只剩下足够的字符来完成所需数组的长度(在本例中为 8 个)。

想要的输出:

["I ", "li", "ke", " ", "d", "o", "g", "s"]

JS 代码

var input = "I like dogs"; // 11 chars
var tilesNeeded = Math.round(input.length / 2) + 1; // 7 tiles needed

if(isPrime(tilesNeeded)){
     tilesNeeded += 1; // 8 tiles needed
}

var result = input.match(new RegExp('.{1,' + Math.floor(input.length / tilesNeeded) + '}', 'g'));
               
while(result.length > tilesNeeded) {
     result[result.length - 2] += result[result.length - 1];
     result.splice(result.length - 1);
}

console.log(result); // ["I", " ", "l", "i", "k", "e", " ", "dogs"]

function isPrime(num){
     for(var i = 2, s = Math.sqrt(num); i <= s; i++)
          if(num % i === 0) return false; 
          return num > 1;
}

【问题讨论】:

    标签: javascript arrays regex splice


    【解决方案1】:

    您在这里并不需要正则表达式。试试下面的代码。

    var input = "I like dogs"; // 11 chars
    var tilesNeeded = Math.round(input.length / 2) + 1; // 7 tiles needed
    
    if(isPrime(tilesNeeded)){
         tilesNeeded += 1; // 8 tiles needed
    }
    var start=0;
    var jump=2;
    var result=[];
    while(start < input.length) {
         result.push(input.substring(start,start+jump));
         start+=jump;
         if(input.length-start==tilesNeeded-result.length)
         {
            jump=1;
         }
         
    }
    
    console.log(result); //["I ", "li", "ke", " ", "d", "o", "g", "s"]
    
    function isPrime(num){
         for(var i = 2, s = Math.sqrt(num); i <= s; i++)
              if(num % i === 0) return false; 
              return num > 1;
    }

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 2020-03-13
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2020-06-29
      • 2019-09-11
      相关资源
      最近更新 更多