【问题标题】:Is there a one-liner to convert '1234567' into ['1234', '567', '', '']?是否有一种方法可以将 '1234567' 转换为 ['1234', '567', '', '']?
【发布时间】:2020-11-13 02:50:55
【问题描述】:

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

  • "1234567812345678" -> ["1234", "5678", "1234", "5678"]
  • "12345678123" -> ["1234", "5678", "123", ""]
  • "" -> ["", "", "", ""]

我希望它是单行的原因是我需要将它放入 vue 模板字符串中,因此它需要是一个表达式而不是一系列语句。

我不想创建一个专门的函数来将单个参数转换为另一种形式。

我设法将字符串拆分为一个数组,但我不知道如何用'' 填充空槽,这是一个简化的 sn-p:

const creditcard = '12345678123';

// need a one liner
const groups = creditcard.split(/(?<=^(?:.{4})+)/);

console.log(groups);

【问题讨论】:

  • const groups = creditcard.padEnd(16, ' ').split(/(?&lt;=^(?:.{4})+)/).map(v =&gt; v.trim());

标签: javascript one-liner


【解决方案1】:

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

const creditcard = '12345678123';

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

console.log(groups);

【讨论】:

    【解决方案2】:

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

    const input = '111122223333444';
    
    const output = Array(4).fill().map((_, i) => input.split('').splice(i*4, 4).join(''));
    
    console.log(output);
    // ["1111", "2222", "3333", "444"]
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢你的回答,但我需要一个表达式,而不是一个函数:/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2016-06-05
      • 2011-12-26
      • 2021-10-27
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多