将字符串拆分为具有交替一位和两位数字的数组

Split string into array with alternate one & two digits

本文关键字:一位 两位 数组 数字 拆分 字符串      更新时间:2023-09-26

是否可以拆分一个字符串(可能带有正则表达式(,以便每隔一个数字都是一对(从右端开始(?

//             1                [1]
//            12               [12]
//           123             [1,23]
//          1234           [1,2,34]
//         12345          [12,3,45]
//        123456        [1,23,4,56]
//       1234567      [1,2,34,5,67]
//      12345678     [12,3,45,6,78]
//     123456789   [1,23,4,56,7,89]
//    1234567890 [1,2,34,5,67,8,90]

我尝试反转字符串,然后添加交替的两个和一个字符块,直到字符串的末尾(前面(。然后再次反转。这主要有效,但它有缺陷(并非适用于所有情况(。我也尝试了正则表达式

('d'd)('d)('d'd)('d)('d'd)('d)

但这也不起作用(具有讽刺意味的是,仅在正则表达式测试器中( - 它太长了,但我需要它最多适用于 10 位数字。

没那么难:

从右边开始,我将取一次 2 位数字,第二次取 1 位数字。使用 slice .然后我将使用 unshift 在数组的开头推送它。

我正在使用一个标志,知道何时只采用 1 个参数,何时采用两个参数(配对标志(

m(1)
m(12)
m(123)
m(1234)
m(12345)
m(123456)
m(12345678)
m(123456789)
m(1234567890)
function m(x){
    x=x.toString()
    var a=[]
    var v;
    var y=2
    while(x){
        v=x.slice(-y)
        x=x.slice(0,-y)        
        y=y==1? 2:1
        a.unshift(v)
    }
    console.log(a)
}

结果:

["1"]
["12"]
["1", "23"]
["1", "2", "34"]
["12", "3", "45"]
["1", "23", "4", "56"]
["12", "3", "45", "6", "78"]
["1", "23", "4", "56", "7", "89"]
["1", "2", "34", "5", "67", "8", "90"]

我最终到达了那里。

//             1                [1]
//            12               [12]
//           123             [1,23]
//          1234           [1,2,34]
//         12345          [12,3,45]
//        123456        [1,23,4,56]
//       1234567      [1,2,34,5,67]
//      12345678     [12,3,45,6,78]
//     123456789   [1,23,4,56,7,89]
//    1234567890 [1,2,34,5,67,8,90]
var results = "";
pairUp(1)
pairUp(12)
pairUp(123)
pairUp(1234)
pairUp(12345)
pairUp(123456)
pairUp(12345678)
pairUp(123456789)
pairUp(1234567890)
alert(results);
function pairUp(num)
{
  var s = num.toString();
  s = s.split("").reverse().join("");
  var a = s.split("");
  var r = []; // our results array
  count = 0;
  for (var i = 0; i <= a.length -1; i++)
  {
    temp = a[count];
    if ((i % 2) == 0) // even (0, 2, 4)
    {
      var p = a[count+1];
      var q = a[count];
      if (p == undefined) p = "";
      if (q) r.push(p + q+ "");
      count+=2;
    }
    else 
    {
      if (temp != undefined) r.push(temp + "");
      count+=1;
    }
  } // end loop

  r = r.reverse();
  results+= r + "'n";
} // end pair up