代码之家  ›  专栏  ›  技术社区  ›  wayoh22

按特定数字将数组中的元素排序

  •  0
  • wayoh22  · 技术社区  · 5 年前

    我有一个字符串数组,我需要将其串联起来以生成一个字符串,但应用一个称为 associatedNumber . 这个 关联号码 确定在最终输出中,同一字符的所有分组(来自数组)不得长于此值 关联号码 .

    output = [
      'MMM', 'GG', 'MM',
      'MM',  'XX', 'A',
      'B',   'D',  'M',
      'Z'
    ]
    

    我需要输出为:

    MMMGGMMMXXABDMZ
    

    我的代码是:

    output = [
      'MMM', 'GG', 'MM',
      'MM',  'XX', 'A',
      'B',   'D',  'M',
      'Z'
    ]
    associatedNumber = 3;
    
    for (i = 0; i < output.length; i++) {
        if (output[i] === associatedNumber);
        output.splice(i,1);
    }
    console.log(output)
    

    output = [
      'HHHH', 'DDD',
      'DD',   'HH',
      'J',    'L',
      'M'
    ]
    

    应等于:

    HHHDDDHHJLM
    
    3 回复  |  直到 5 年前
        1
  •  2
  •   trincot    5 年前

    您只需将数组连接到一个字符串,然后将过长的字符组替换为最大长度的字符组。可以使用正则表达式进行替换:

    function toString(arr, maxSame) {
       let regex = RegExp(`((.)\\2{${maxSame-1}})\\2+`, "g");
       return arr.join("").replace(regex, "$1");
    }
    
    let arr = [
      'MMM', 'GG', 'MM',
      'MM',  'XX', 'A',
      'B',   'D',  'M',
      'Z'
    ];
    console.log(toString(arr, 3));
        2
  •  0
  •   Moritz Valentin    5 年前

    output.join().replace(/,/g, '')

    output = [
      'MMM', 'GG', 'MM',
      'MM',  'XX', 'A',
      'B',   'D',  'M',
      'Z'
    ]
    newString = output.join().replace(/,/g, '')
    
    console.log(newString)

    MDN参考: .join .replace

        3
  •  0
  •   Nina Scholz    5 年前

    您可以使用各种方法来连接、匹配、映射和连接字符串。

    function x(array, max) {
        return array
            .join('')
            .match(/(.)\1*/g)
            .map(s => s.slice(0, max))
            .join('');
    }
    
    console.log(x(['MMM', 'GG', 'MM', 'MM', 'XX', 'A', 'B', 'D', 'M', 'Z'], 3));