我想从HTML中的input元素得到的给定字符串创建矩形多维数组。矩形的尺寸取决于字符串的长度。
例如
ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots
纯文本应组织成一个矩形。矩形(r x c)
的大小应由邮件的长度决定,例如c >= r
和c - r <= 1
其中 c 是列数,r是行数。
我们的规范化文本长54个字符,指定了一个c = 8和r = 7的矩形:
"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots
请检查https://codepen.io/djtush/pen/ewvNEG看看我做了什么。
const myFunction = () =>
{
let message = document.getElementById("message").value;
if (message.length < 50) {
alert ("Your Message can not be less than 50 Characters");
}
else {
let removedSpace = message.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
document.getElementById("noSpace").innerHTML = removedSpace;
let squared = Math.sqrt(removedSpace.length);
let column = Math.ceil(squared);
let row = Math.floor(squared);
document.getElementById("no-Space").innerHTML = row;
}
}
我希望有一个数组块
答案 0 :(得分:1)
让正则表达式完成这项工作:
s = 'ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots'
n = Math.ceil(Math.sqrt(s.length))
r = s.match(new RegExp(`.{1,${n}}`, 'g'))
console.log(r)
答案 1 :(得分:0)
您可以从cols = length of string
开始,然后使用while循环增加行数,直到cols - rows > 1
。然后,您可以使用列数来分割字符串。
function rect(string) {
let len = string.length;
let cols = len, rows = 1;
let res = []
while (cols - rows > 1) {
rows += 1;
cols = Math.ceil(len / rows);
}
for (let i = 0; i < rows; i++) {
res.push(string.slice(i * cols, i * cols + cols))
}
return res;
}
console.log(rect('ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots'))
console.log(rect('randomteststring'))