给定输入str1为"abc“,str2为"def”,输出应为adbecf,给定str1 = "ab“,str2 = "def”,输出应为adbef
我的输出是:
merge('abc','def') "adbecfNaN“
merge('ab','def') "adbeundefinedf“
我一直在尝试过滤undefined和NAN,但它不起作用。
下面是我的代码:
function merge (str1, str2) {
var a = str1.split("").filter(Boolean);
var b = str2.split("");
var mergedString = '';
for(var i = 0; i <= a.length && i <= b.length; i++) {
mergedString += a[i] + b[i];
}
return mergedString;
}
发布于 2017-09-06 13:12:36
您需要在循环条件中使用<
而不是<=
,因为数组索引是从0开始的。这就是你得到NaN的原因。你可以这样做:
function merge (str1, str2) {
var a = str1.split("").filter(Boolean);
var b = str2.split("");
var mergedString = '';
for(var i = 0; i < a.length || i < b.length; i++) { //loop condition checks if i is less than a.length or b.length
if(i < a.length) //if i is less than a.length add a[i] to string first.
mergedString += a[i];
if(i < b.length) //if i is less than b.length add b[i] to string.
mergedString += b[i];
}
return mergedString;
}
console.log(merge('abc','def'));
console.log(merge('ab','def'));
发布于 2017-09-06 13:54:53
最短也可能是最快的方法是迭代字符串的最小长度,然后取两个字符串的其余部分。
function zip(a, b) {
var i,
l = Math.min(a.length, b.length),
temp = '';
for( i = 0; i < l; i++) {
temp += a[i] + b[i];
}
return temp + a.slice(i) + b.slice(i);
}
console.log(zip('abc', '123')); // a1b2c3
console.log(zip('ab', '123')); // a1b23
console.log(zip('abcd', '12')); // a1b2cd
对于ES6,您可以将Array.from
与字母的内置映射器一起使用。
var a = "ab",
b = "def",
result = Array.from(a.length > b.length ? a : b, (_, i) => (a[i] || "") + (b[i] || ""))
.join('');
console.log(result);
发布于 2017-09-06 21:23:21
一种简单的方法:迭代最长的字符串,输出当前索引处的字符组合,如果当前索引处没有字符,则使用空字符串。
console.log(merge('ab','def'));
function merge(a, b){
for(var i = 0, s = '', l = Math.max(a.length, b.length); i < l; i++){
s += a.charAt(i) || '';
s += b.charAt(i) || '';
}
return s;
}
https://stackoverflow.com/questions/46067156
复制相似问题