是否有将'1234567'转换为['1234','567','','']的单行代码?
Is there a one-liner to convert '1234567' into ['1234', '567', '', '']?
我需要将一个字符串转换成一个有 4 个元素的数组,每个元素最多有 4 个字符。
"1234567812345678"
-> ["1234", "5678", "1234", "5678"]
"12345678123"
-> ["1234", "5678", "123", ""]
""
-> ["", "", "", ""]
我希望它成为单行代码的原因是我需要将它放入 vue 模板字符串中,因此它需要是一个表达式而不是一系列语句。
我不想创建专门的函数来将单个参数转换为另一种形式。
我设法将字符串拆分成一个数组,但我不知道如何用 ''
填充空槽,这是一个简化的片段:
const creditcard = '12345678123';
// need a one liner
const groups = creditcard.split(/(?<=^(?:.{4})+)/);
console.log(groups);
您可以用空格将字符串填充到最少 16 个字符,然后 trim 结果
const creditcard = '12345678123';
// need a one liner
const groups = creditcard.padEnd(16, ' ').split(/(?<=^(?:.{4})+)/).map(v => v.trim());
console.log(groups);
使用slice你可以达到你的目标
代码如下:
function splitToArray(n) {
const ret = [];
for(let i = 0; i < 16; i += 4) {
ret.push(n.slice(i, i + 4))
}
return ret;
}
console.log(splitToArray(''));
console.log(splitToArray('1234567812345678'));
console.log(splitToArray('12345678123'));
另一种选择是分配一个包含四个元素的数组,并用您输入的拼接填充它:
const input = '111122223333444';
const output = Array(4).fill().map((_, i) => input.split('').splice(i*4, 4).join(''));
console.log(output);
// ["1111", "2222", "3333", "444"]
我需要将一个字符串转换成一个有 4 个元素的数组,每个元素最多有 4 个字符。
"1234567812345678"
->["1234", "5678", "1234", "5678"]
"12345678123"
->["1234", "5678", "123", ""]
""
->["", "", "", ""]
我希望它成为单行代码的原因是我需要将它放入 vue 模板字符串中,因此它需要是一个表达式而不是一系列语句。
我不想创建专门的函数来将单个参数转换为另一种形式。
我设法将字符串拆分成一个数组,但我不知道如何用 ''
填充空槽,这是一个简化的片段:
const creditcard = '12345678123';
// need a one liner
const groups = creditcard.split(/(?<=^(?:.{4})+)/);
console.log(groups);
您可以用空格将字符串填充到最少 16 个字符,然后 trim 结果
const creditcard = '12345678123';
// need a one liner
const groups = creditcard.padEnd(16, ' ').split(/(?<=^(?:.{4})+)/).map(v => v.trim());
console.log(groups);
使用slice你可以达到你的目标
代码如下:
function splitToArray(n) {
const ret = [];
for(let i = 0; i < 16; i += 4) {
ret.push(n.slice(i, i + 4))
}
return ret;
}
console.log(splitToArray(''));
console.log(splitToArray('1234567812345678'));
console.log(splitToArray('12345678123'));
另一种选择是分配一个包含四个元素的数组,并用您输入的拼接填充它:
const input = '111122223333444';
const output = Array(4).fill().map((_, i) => input.split('').splice(i*4, 4).join(''));
console.log(output);
// ["1111", "2222", "3333", "444"]