是否有将'1234567'转换为['1234','567','','']的单行代码?

Is there a one-liner to convert '1234567' into ['1234', '567', '', '']?

我需要将一个字符串转换成一个有 4 个元素的数组,每个元素最多有 4 个字符。

我希望它成为单行代码的原因是我需要将它放入 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"]