合并/缠绕2个不同长度的字符串

时间:2018-09-10 14:41:37

标签: javascript cryptography

我想缠绕(?)两个字符串,例如:

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'

是否有一个内置函数可以执行这样的操作?

5 个答案:

答案 0 :(得分:1)

也许是地图?

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'])
)  

答案 1 :(得分:1)

没有内置功能,但是很容易做到:

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);

答案 2 :(得分:1)

没有本地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);

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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