【问题标题】:Merge/Intertwine 2 strings of differing lengths合并/交织 2 个不同长度的字符串
【发布时间】:2019-02-15 00:50:21
【问题描述】:

我想将两个字符串交织(?),例如:

string A = 'HELLO WORLD!'
string B = '66666666666666666666' //twenty 6's
output = 'H6E6L6L6O6 6W6O6R6L6D6!666666666'

或者例如:

string A = 'SOME REALLY REALLY LONG STRING'
string B = '66666666666666666666'  //twenty 6's
output = 'S6O6M6E6 6R6E6A6L6L6Y6 6R6E6A6L6L6Y6 6L6ONG STRING'

有没有内置函数可以做这样的事情,它叫什么?

【问题讨论】:

  • 没有原生函数有这样的功能,你必须自己写
  • Interleave 将是进程的名称!
  • 为什么是cryptography? O.o
  • @Andreas 我相信有一个以这种方式实现的密码(大约),我只是想不起来它叫什么
  • 此链接提供解决方案stackoverflow.com/questions/13253856/…

标签: javascript cryptography


【解决方案1】:

有内置的String.raw template tag function,它几乎完全符合您的要求;

var strA = 'SOME REALLY REALLY LONG STRING',
    strB = '66666666666666666666',
    strZ = String.raw({raw : strA}, ...strB);

console.log(strZ);

所以...来到 几乎 部分,如果 strAstrB 短,则跳过 strB 的剩余字符。

var strA = 'HELLO WORLD!',
    strB = '66666666666666666666',
    zipS = String.raw({raw: strA},...strB);
    
console.log(zipS);

在这种情况下,我们可以添加一个简单的逻辑来修复我们的代码。

var zipStr = (s,t,d) => ( d = s.length - t.length
                        , String.raw({raw: s},...t) + (d < 0 ? t.slice(d) : "")
                        ),
    strA   = 'HELLO WORLD!',
    strB   = 'SOME REALLY REALLY LONG STRING',
    strC   = '66666666666666666666',
    zipAC  = zipStr(strA,strC),
    zipBC  = zipStr(strB,strC);
    
console.log(zipAC);
console.log(zipBC);

【讨论】:

    【解决方案2】:

    没有内置函数,但很容易做到:

    var a = 'some long string';
    var b = '2292929292302720709970709710';
    
    var str1 = a.length < b.length ? b:a;
    var str2 = a.length < b.length ? a:b;
    
    var result = [...str1].reduce((acc, char, index) => {
        acc += char + (str2[index] || '');
        return acc; 
    }, '');
    
    console.log(result);

    【讨论】:

    • 公平评论@gyc..我应该更新修复..谢谢!
    【解决方案3】:

    使用replace(),您可以将匹配传递给回调函数,然后,使用shift(),每次我们有匹配时,您都会获得第二个字符串的第一个元素(变成数组),最后添加剩余元素使用+ arr.join(""):

    function addSomethig(str, str2){
    
        var arr = str2.split("");
    
        str = str.replace(/[A-Z ]/gi, (m)=>(arr.length>0)?m+arr.shift():m) + arr.join("");
        
        return str;
    
    }
    
    console.log(addSomethig('SOME REALLY REALLY LONG STRING', '66666666666666666666'));
    
    console.log(addSomethig('HELLO WORLD!', '66666666666666666666'));
    
    console.log(addSomethig('SOME REALLY REALLY LONG STRING', 'anything, like: 789798798798798'))

    【讨论】:

    • 另外你的版本没有 6 6 周围的空格
    【解决方案4】:

    也许是地图?

    function joinIt(strs) {
      var strA = strs[0].length <= strs[1].length?strs[0]:strs[1];
      var strB = strs[1].length <= strs[0].length?strs[0]:strs[1];
    
      return strB.split("").map(function(b, i) {
        var a = strA.charAt(i);
        return b + a;
      }).join("")
    }
    console.log(
      joinIt(['HELLO WORLD!', '66666666666666666666'])
    )
    
    console.log(
      joinIt(['SOME REALLY REALLY LONG STRING','66666666666666666666'])
    )  

    【讨论】:

      【解决方案5】:

      function interleave(str1, str2){
        let outstr = "";
        for(let i = 0; i < Math.max(str1.length, str2.length);i++){
          if(i < str1.length){
            outstr += str1[i];
          }
          if(i < str2.length){
            outstr += str2[i];
          }
        }
        return outstr;
      }
      
      console.log(interleave('aaaaa','bbbbbbbbbbbb'));

      【讨论】:

        【解决方案6】:

        没有原生的JS函数,但它是一个单行函数。

        var stringA = 'SOME REALLY REALLY LONG STRING';
        var stringB = '66666666666666666666'; //twenty 6's //twenty 6's
        var stringC = '';
        
        for (var i = 0; i < (Math.max(stringA.length, stringB.length)); i++) {
          stringC += (stringA[i] ? (stringB[i] ? stringA[i] + stringB[i] : stringA[i]) : (stringB[i] ? stringB[i] : ''));
        }
        
        console.log('stringC: ', stringC);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-28
          • 2019-11-30
          • 1970-01-01
          • 1970-01-01
          • 2012-12-23
          相关资源
          最近更新 更多