Javascript 将字符串等分为#长度
我有一个字符串Javascript 将字符串等分为#长度,javascript,Javascript,我有一个字符串1234567890 我想每4个字符或n个字符将其分开 必须从字符串末尾开始分割 在上述情况下,它将是[“12”、“3456”、“7890”] 123=>[“123”] 12345=>[“1”、“2345”] 我在这里找到了一些类似的答案,我编辑了它,但它不起作用 函数getChunks(数量、大小){ 设str=number.toString(), 长度=长度-尺寸+1; 返回数组.from({length},(u,i)=>+str.slice(i*size,(i*size)+
1234567890
我想每4个
字符或n个
字符将其分开
必须从字符串末尾开始分割
在上述情况下,它将是[“12”、“3456”、“7890”]
123
=>[“123”]
12345
=>[“1”、“2345”]
我在这里找到了一些类似的答案,我编辑了它,但它不起作用
函数getChunks(数量、大小){
设str=number.toString(),
长度=长度-尺寸+1;
返回数组.from({length},(u,i)=>+str.slice(i*size,(i*size)+size))
}
log(getChunks(1234,4));
log(getChunks(12345,4));
log(getChunks(123,4));
log(getChunks(1234567890,4))代码>快速解决方案如下:
- 您可以使用索引为
-4
来获取字符串的最后4个字符李>
- 使用
str.slice(0,-4)
更新原始字符串str
,以删除最后四个字符
- 重复相同的步骤,直到
str.length
为0
。循环中的最后一个str
长度可以小于4个字符,并且不会影响String.prototype.slice()
的使用
- 最后,使用以正确地重新排列数组
let str=“1234567890”;
设分段=[];
while(str.length){
推(str.slice(-4));
str=str.slice(0,-4);
}
段。反向();
控制台日志(段)代码>要更正初始代码,它有两个问题
新数组的派生长度错误-str.length-size+1
将给出错误的结果。假设str.length==10
和size=4
,那么这将是10-4+1
,它将为您提供7
。
- 实际长度应该是
size
放入str.length
的次数。你还需要集中精力。因此,str.length==8
和size==4
将导致2
,而str.length==10
和size==4
是3
李>
- 公式是
Math.ceil(str.length/size)
使用str.slice(i*size,(i*size)+size)
进行的分块尝试使第一组尽可能大,最后一组可能小。然而,你需要相反的效果——最后一组应该尽可能小,第一组应该有足够的物品来容纳剩下的任何东西。
- 确定“剩下什么”的方法是使用,例如,
10%4==2
。因此,第一组必须由两个项目组成。由于这决定了组的大小,这意味着它必须作为起始索引和结束索引的偏移量来考虑。不幸的是,这使得推导公式非常烦人-您需要最大差值大小
,最小差值余数
。第一个开始应该始终是0
,第一个结束余数
,然后每次后续迭代,您都需要在开始和结束处添加大小
。但是,第一个和第二个开始
索引可以小于大小
。就像我说的,讨厌,所以你想要的公式是
start=Math.max(0,size*(i-1)+余数)
-对于i=0,可以取负数,但可以将其钳制为最小值为零。第二次迭代从余数开始。因此,进程是0->余数->余数+大小->余数+大小
等等
end=余数+大小*i
-添加余数
作为偏移量,每次仅增加大小
。进程是rements->rements+size->rements+size+size
等
余数=(str.length%size)| | size
-非常重要,但留到最后。我认为,一旦你知道了开始
和结束
是如何工作的,这就更有意义了。余数的这个定义解决了当str.length
完全可以被大小整除时会出现的问题。如果不使用size
而不是0
,您将遇到str.length==4
和size==4
的问题end
公式将给出0
。因此,换句话说,我们必须将其定义为0>余数>=size
所有这些都会生成正确的版本:
函数getChunks(数量、大小){
设str=number.toString(),
长度=数学单元(长度/尺寸);
让余数=(str.length%size)| size;
返回数组。from({length},(1;,i)=>{
让start=Math.max(0,size*(i-1)+余数);
让结束=余数+大小*i;
return+str.slice(
开始
结束
)
})
}
log(getChunks(1234,4));
log(getChunks(12345,4));
log(getChunks(12345678,4));
log(getChunks(123,4));
log(getChunks(1234567890,4))
@zynkn如果你在很长一段时间内经常这样做,你就会习惯于不费吹灰之力就做这样的事情。熟能生巧!:)哇,看起来像一篇论文。我会阅读并努力理解它。非常感谢你。