【发布时间】: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