我有以下代码:
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
答案 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)
循环中的返回使其在第一次迭代期间停止。修复后,您还应该更改循环的结束条件,否则它只会迭代两次。
但您也可以使用split
,map
和join
这样做:
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;
replace
回调
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;
答案 3 :(得分:0)
这样可以解决问题:
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>[l, strgs[1][ix] || '']);
console.log(res);
&#13;
如果您更喜欢连接字符串:
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>l + ' ' + strgs[1][ix] || '')
console.log(res);
&#13;
将字符串打印到控制台:
var strgs = ['Hello','World'];
var res = strgs[0].split('').map((l, ix)=>l + ' ' + strgs[1][ix] || '')
res.forEach((e)=>console.log(e));
&#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']));