Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串分隔为字符串数组,每n个字符反转一次_Javascript - Fatal编程技术网

Javascript 将字符串分隔为字符串数组,每n个字符反转一次

Javascript 将字符串分隔为字符串数组,每n个字符反转一次,javascript,Javascript,我正在尝试将一个大数字(字符串)格式化为区域设置的格式。toLocaleString或任何类似的都不起作用,我必须手动执行。忘了换一个新的。现在,我只想把数字分成3块,就像几千块一样。我试图通过反转字符串,每3个字符将其拆分为一个数组,然后反转回来来实现这一点 const chunkByThree = (input) => { let chunkedInput = input.split('').reverse().join('').match(/.{1,3}/g); chunke

我正在尝试将一个大数字(字符串)格式化为区域设置的格式。toLocaleString或任何类似的都不起作用,我必须手动执行。忘了换一个新的。现在,我只想把数字分成3块,就像几千块一样。我试图通过反转字符串,每3个字符将其拆分为一个数组,然后反转回来来实现这一点

const chunkByThree = (input) => {
  let chunkedInput = input.split('').reverse().join('').match(/.{1,3}/g);
  chunkedInput = chunkedInput.reverse();

  return chunkedInput;
}
但是,让我们来个大数字,比如“1243525152519”。它应该分为两部分
['1'、'243'、'525'、'152'、'519']但由于反转只影响数组元素的顺序,而不影响值本身,因此当将其反转回第3行时,函数将返回['1'、'342'、'525'、'251'、'915']。除了数组元素的顺序之外,我如何通过反转每个数组值中的字符串来正确地反转它呢?

您可以使用,在每次迭代结束时从末尾删除3。如果剩下的数字少于3位,那么剩下的1或2位就可以得到

使用允许您将块推入数组的开头,而不是追加到数组的结尾,从而使块保持正确的顺序

然后可以使用join重新组合块。不需要正则表达式或反转

像这样的

const num='124352515219'; 常量位数=num.split; 常量块=[]; whiledigits.length{//只要我们有更多的数字… //…去掉最后三个,把它们串起来, //将其推入chunks数组的开头: chunks.unshiftdigits.splice-3.join; } //然后用您喜欢的分隔符重新组合块 const result=chunks.join','//连接块
console.logresult;//瞧你可以使用map再次拆分每个块,然后将它们反转,然后再次合并

你可以这样做:

const chunkByThree=输入=>{ 让chunkedInput=输入 分裂 颠倒 参加 .match/{1,3}/g 颠倒 .mapi=>i.split.reverse.join; 返回输出; }; console.logchunkbythree124352515219 也许这可以:

函数splitNumericStringstr{ const firstChunkLength=str.length%3; 让输出=[]; 如果firstChunkLength>0{ output.pushstr.slice0,firstChunkLength; } output.push…str.slicefirstChunkLength.match/{3}/g 返回输出 } //试验 常量str='124352515219'; console.logsplitNumericStringstr 由于ray hatfield已经提供了最直接的方法,我很好奇类似但基于正则表达式的方法会是什么样子

事实证明,这比最初想象的要简单。基础是正则表达式。。。它具有负回溯功能,并且一次只匹配一个可能的最右边的千位数组。只要匹配,就用自身和前缀点替换捕获的组

函数格式千位SSTR,分隔符{ separator=typeof separator=='string'&&separator | |','; str=Stringstr; //看[https://regex101.com/r/FLADiS/1] 常量regXrightMostThousandGroup=/?
.作为控制台包装{最小高度:100%!重要;顶部:0;}为什么您必须手动执行此操作?为什么不使用?@rayhatfield Intl.NumberFormat对于大小数来说是不可靠的,因为即使我使用max/minFractionDecimals选项,它也会在非常大的数字之后开始取整。数字需要精确。它们也是来自我的API的字符串。您可以使用map,然后拆分为reverse和join。但是为什么要混响呢首先使用se字符串?字符串的结尾应该是什么样子,带点和逗号?如果我正确理解了您的要求,您可以完全避免整个拆分/反转/连接过程;我发布了一个替代解决方案,展示了如何使用