将字符串拆分为每个数组元素 2 个字符,长度为 n,然后将 JavaScript 中的剩余元素拆分为 1 个字符
Split string into 2 chars per array element for n length then 1 char for remaining elements in JavaScript
我有一个字符串(输入),稍后会转换为数组(结果)。数组的大小取决于所需的图块数 (tilesNeeded)。下面的示例包含一个 11 个字符的字符串。在这种情况下,需要 8 个图块。下面的代码输出:
["I", " ", "l", "i", "k", "e", " ", "dogs"]
数组的每个元素代表一个图块。所以“I”是它自己的图块,“”是一个图块,“l”是一个图块,等等。数组中的最后一个元素不是“dogs”,我想遍历字符串并在每个元素中放置 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;
}
你在这里真的不需要正则表达式。试试下面的代码。
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;
}
我有一个字符串(输入),稍后会转换为数组(结果)。数组的大小取决于所需的图块数 (tilesNeeded)。下面的示例包含一个 11 个字符的字符串。在这种情况下,需要 8 个图块。下面的代码输出:
["I", " ", "l", "i", "k", "e", " ", "dogs"]
数组的每个元素代表一个图块。所以“I”是它自己的图块,“”是一个图块,“l”是一个图块,等等。数组中的最后一个元素不是“dogs”,我想遍历字符串并在每个元素中放置 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;
}
你在这里真的不需要正则表达式。试试下面的代码。
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;
}