1

我需要将一个字符串转换为一个有 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);

4

3 回答 3

4

您可以用空格将字符串填充到至少 16 个字符,然后修剪结果

const creditcard = '12345678123';

// need a one liner
const groups = creditcard.padEnd(16, ' ').split(/(?<=^(?:.{4})+)/).map(v => v.trim());

console.log(groups);

于 2020-11-13T02:55:53.230 回答
1

另一种选择是分配一个包含四个元素的数组,并使用输入中的拼接填充它:

const input = '111122223333444';

const output = Array(4).fill().map((_, i) => input.split('').splice(i*4, 4).join(''));

console.log(output);
// ["1111", "2222", "3333", "444"]
于 2020-11-13T03:08:02.293 回答
0

使用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'));

于 2020-11-13T03:01:15.600 回答