在数组中转置2个字符串

时间:2017-04-03 19:41:41

标签: javascript transpose

我有以下代码:

function transposeTwoStrings(arr){
 var stringOne = arr[0];
 var stringTwo = arr[1];

 for (var i = 0; i < arr.length; i++) {
     return (stringOne.charAt(i) + " " + stringTwo.charAt(i));
 }

我期待输出如下:

e.g. transposeTwoStrings(['Hello','World']);

应该返回

H W
e o
l r
l l
o d

但是它只返回每个字符串的第一个索引处的第一个字符。我试图返回两个字符串的所有字符。

我最初使用if / else有一个更详细的解决方案,并决定使用for循环重构。

我被卡住了当前正在显示的输出

H W

6 个答案:

答案 0 :(得分:3)

retun在你的循环中间,这将导致它只循环一次。此外,您使用了错误的对象来确定length

请改为尝试:

function transposeTwoStrings(arr){
    var stringOne = arr[0];
    var stringTwo = arr[1];
    var ret = '';

    for (var i = 0; i < arr[0].length; i++) {
        ret += stringOne.charAt(i) + " " + stringTwo.charAt(i) + '\n\r';
    }

    return ret;
}

答案 1 :(得分:1)

使用其中一个字符串长度作为for循环中的条件:

function transposeTwoStrings(arr){
 var stringOne = arr[0];
 var stringTwo = arr[1];
 var calculatedStr = '';

 var loopCount = 0;

 // CALCULATE LOOP COUNT
 if(stringOne.length > stringTwo.length){
     loopCount = stringTwo.length;
 }else{
     loopCount = stringOne.length;
 }

 for (var i = 0; i < loopCount; i++) {
     calculatedStr += stringOne.charAt(i) + " " + stringTwo.charAt(i));
 }

 // ADD REMAINING CHARACTERS TO STRING RESULT IF SIZE IS DIFFERENT
 if(stringOne.length > loopCount){

     calculatedStr += stringOne.substring(loopCount);

 }
 if(stringTwo.length > loopCount){

     calculatedStr += stringTwo.substring(loopCount);

 }

 return calculatedStr;

}

答案 2 :(得分:1)

循环中的返回使其在第一次迭代期间停止。修复后,您还应该更改循环的结束条件,否则它只会迭代两次。

但您也可以使用splitmapjoin这样做:

&#13;
&#13;
function transposeTwoStrings(arr){
    return arr[0].split('')
                 .map( (a, i) => a + ' ' + arr[1][i] )
                 .join('\n'); 
}

var result = transposeTwoStrings(['Hello','World']);

console.log(result);
&#13;
&#13;
&#13;

替代replace回调

&#13;
&#13;
function transposeTwoStrings(arr){
    var i = 0;
    return arr[0].replace(/./g, c => c + ' ' + arr[1][i++] + '\n')
}

var result = transposeTwoStrings(['Hello','World']);

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这样可以解决问题:

&#13;
&#13;
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>[l, strgs[1][ix] || '']);
console.log(res);
&#13;
&#13;
&#13;

如果您更喜欢连接字符串:

&#13;
&#13;
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>l + ' ' + strgs[1][ix] || '')
console.log(res);
&#13;
&#13;
&#13;

将字符串打印到控制台:

&#13;
&#13;
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>l + ' ' + strgs[1][ix] || '')
res.forEach((e)=>console.log(e));
&#13;
&#13;
&#13;

如果是不同大小的字符串,第一个将定义长度,第二个元素将是&#39;&#39;如果第一个元素不存在。

答案 4 :(得分:0)

您可以使用字符串的最大长度并尊重空位。

function transposeTwoStrings(array){
    var i, length = array.reduce(function (r, a) { return Math.max(r, a.length); }, 0),
        result = [];

    for (i = 0; i < length; i++) {
        result.push(array.map(function (a) { return a[i] || ' '; }).join(' '));
    }
    return result;
}

console.log(transposeTwoStrings(['Hello', 'World']).join('\n'));
console.log(transposeTwoStrings(['This', 'is', 'a', 'test']).join('\n'));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 5 :(得分:0)

试一下:

function transposeTwoStrings(arr) {
  var array = [];
  for (var i = 0; i < arr[0].length; i++) {
    array.push(arr[0][i] + " "+ arr[1][i]);
  }
  return array.join('\n');
}

console.log(transposeTwoStrings(['Hello','World']));