gpt4 book ai didi

javascript - 从最后一个位置开始每隔 n 个位置分割编号

转载 作者:行者123 更新时间:2023-11-28 12:52:34 25 4
gpt4 key购买 nike

我有一个这样的号码。

const number = 123456789;

我想将其拆分为 [1, 2345, 6789]['1','2345','6789']

我发现 match()Regex

console.log(number.toString().match(/.{1,4}/g));

它返回['1234', '5678', '9']

看起来做得很好,但这是我想要的相反结果。

所以,我为此制定了一个棘手的流程。

console.log(number.toString().split('').reverse().join('').match(/.{1,4}/g));

所以,现在我得到['9876','5432','1']

但它仍然不是我想要的。

console.log(
number.toString().split('').reverse().join('').match(/.{1,4}/g).map(str=>str.split('').reverse().join('')).reverse());

终于可以得到我想要的结果了。

但它看起来非常丑陋且效率低下。

即使我认为它不应该在代码中使用。

所以,我的问题是如何有效地在每个nth位置分割一个数字?

最佳答案

如果您想让代码更短,请匹配 1 到 4 个字符,同时对 0 组或多组 .{4} 使用负向前瞻,后跟 $(字符串结尾):

const number = 123456789;
console.log(
number.toString().match(/.{1,4}(?=(?:.{4})*$)/g)
);

但这需要在每次匹配时检查从匹配到字符串末尾的字符数,总体来说这是一个 O(n ^ 2) 过程。为了提高效率,首先检查字符串的长度,然后使用取模来取尽可能多的字符,使剩余字符串的长度为4的倍数:

const str = String(123456789);
const index = str.length % 4;
const firstItem = str.slice(0, index);
const items = str.slice(index).match(/\d{4}/g);
items.unshift(firstItem);
console.log(items);

此代码较长,但运行时间为 O(n)

关于javascript - 从最后一个位置开始每隔 n 个位置分割编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com