2017-09-06 34 views
3

給定的輸入str1和 「ABC」 和str2是 「高清」 輸出應該adbecf 並給予STR1 = 「AB」 和str2 = 「高清」 輸出應該adbef如何在javascript中交替合併兩個字符串?

我的輸出一直:

合併( 'ABC', '高清') 「adbecfNaN」

合併( 'AB', '高清') 「adbeundefinedf」

我一直在試圖篩選不確定和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; 

} 
+0

'A [1]''是當undefined''我== a.length';你想'我 Ryan

+0

我試過這個建議,我的輸出是合併('ab','def') 「adbe」。我仍然錯過了「f」。 –

回答

1

你需要使用<而不是<=在循環條件,數組索引從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'));
在ES6

0

一號線:挑選較大的字符串,對在其上,並加入:

var a = "ab", b = "def" 

Array.from(a.length > b.length ? a : b) 
    .map((_, i) => (a[i] || "") + (b[i] || "")) 
    .join() 
0

JS斌鏈接 - https://jsbin.com/nihoxivoxa/edit?js,console

function merge (str1, str2) { 
 

 
    var a = str1.split(""); 
 

 
    var b = str2.split(""); 
 
    
 
    var count = 0; 
 
    
 
    var merged_string = ""; 
 
    //let's determine the loop counts, which depends on the smaller length of string 
 
    
 
    a.length < b.length ? count = a.length: count = b.length; 
 
    
 
    
 
    for(var i=0; i< count; i++){ 
 
    merged_string += a[i]+b[i]; 
 
    
 
    } 
 
    
 
    // add remaining characters 
 

 
    count < str1.length 
 
    ? merged_string += str1.substr(count, str1.length) 
 
    : merged_string += str2.substr(count, str2.length) 
 

 
    
 
    return merged_string; 
 

 
    
 
} 
 
console.log(merge('ab','xysfergtrhyhn'))

0
function merge(s1, s2) { 
    var result = ""; 
    for(var i=0; i<s1.length && i<s2.length; i++){ 
    result+=s1[i]+s2[i]; 
    } 
s1.length<s2.length?result+=s2.substr(s1.length):result+=s1.substr(s2.length) 
return result; 
} 
console.log(merge("abc","12345")); 
console.log(merge("12345","abc")); 
1

的捷徑,並可能是最快的,是要遍歷字符串的長度最小,然後取這兩個字符串的其餘部分。

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

0

如果轉換的字符串數組,可以遞歸地關閉每個陣列的移位的第一個元素到一個新的數組,然後繼續進行,直到沒有剩餘的兩個陣列的元件,最後返回新的數組。

const shift = (a, b) => a.length||b.length?[a.shift(), b.shift(), ...shift(a,b)]:[]; 
 

 
console.log(shift([...'acegik'],[...'bdfhjl']).join('')); // abcdefghijkl 
 
console.log(shift([...'aceg' ],[...'bdfhjl']).join('')); // abcdefghjl 
 
console.log(shift([...'acegik'],[...'bdfh' ]).join('')); // abcdefghik

0

一種簡單的方法:遍歷中最長的字符串,輸出字符的當前索引處的組合,則使用空字符串如果沒有字符存在當前索引處。

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