2014-10-27 46 views
-3

我是JavaScript新手,所以我的問題可能似乎主要。我怎樣才能使這個代碼更簡單,使用for循環重複率低:使javascript代碼更簡單使用for循環

Fiddle

SortingPageAudio.prototype.cardAudios = function (cardNumber) { 
    var page = tabs.page; 
    var card1Audio = page.card1Audio; 
    var card2Audio = page.card2Audio; 
    var card3Audio = page.card3Audio; 
    var card4Audio = page.card4Audio; 
    var card5Audio = page.card5Audio; 
    var card6Audio = page.card6Audio; 

    var FRcard1Audio = card1Audio.replace("e_", "f_"); 
    var FRcard2Audio = card2Audio.replace("e_", "f_"); 
    var FRcard3Audio = card3Audio.replace("e_", "f_"); 
    var FRcard4Audio = card4Audio.replace("e_", "f_"); 
    var FRcard5Audio = card5Audio.replace("e_", "f_"); 
    var FRcard6Audio = card6Audio.replace("e_", "f_"); 

    playAudio.stopAudioPlaying(); 
    if (cardNumber == '0') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard5Audio) : playAudio.playFiles(card5Audio)); 
    } else if (cardNumber == '1') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard4Audio) : playAudio.playFiles(card4Audio)); 
    } else if (cardNumber == '2') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard3Audio) : playAudio.playFiles(card3Audio)); 
    } else if (cardNumber == '3') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard2Audio) : playAudio.playFiles(card2Audio)); 
    } else if (cardNumber == '4') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard1Audio) : playAudio.playFiles(card1Audio)); 
    } else if (cardNumber == '5') { 
     (router.getLanguage() == 'french' ? playAudio.playFiles(FRcard6Audio) : playAudio.playFiles(card6Audio)); 
    } 
}; 
+4

請不要用降價來「解決」不能夠發佈只是一個鏈接:http://meta.stackoverflow.com/questions/272129/using-markdown-to-bypass-link-to -jsfiddle-error – usr2564301 2014-10-27 00:51:46

+1

在這種情況下,jsFiddle是無用的。代碼片段就夠了。 – YoannM 2014-10-27 00:55:31

回答

0

如果不使用for循環,您可以簡單地創建一個對象。

SortingPageAudio.prototype.cardAudios = function (cardNumber) {  
    var rel = { 
     '0': [tabs.page.card5Audio.replace("e_", "f_"), tabs.page.card5Audio], 
     '1': [tabs.page.card4Audio.replace("e_", "f_"), tabs.page.card4Audio], 
     '2': [tabs.page.card3Audio.replace("e_", "f_"), tabs.page.card3Audio], 
     '3': [tabs.page.card2Audio.replace("e_", "f_"), tabs.page.card2Audio], 
     '4': [tabs.page.card1Audio.replace("e_", "f_"), tabs.page.card1Audio], 
     '5': [tabs.page.card6Audio.replace("e_", "f_"), tabs.page.card6Audio] 
    }; 
    playAudio.stopAudioPlaying(); 
    router.getLanguage() == 'french' ? playAudio.playFiles(rel[cardNumber][0]) : playAudio.playFiles(rel[cardNumber][1]); 
}; 
0

這裏是我會怎麼做:

SortingPageAudio.prototype.cardAudios = function (cardNumber) { 
    var langs = { 
     french:{}, 
     english:{} 
    }; 
    var en = langs.english; 
    var fr = langs.french; 
    var audio; 

    for(var i = 1, max = 6; i <= max; i += 1){ 
     audio = tabs.page['card' + i + 'Audio']; 
     en['audio' + i] = audio; 
     fr['audio' + i] = audio.replace('e_', 'f_'); 
    } 

    playAudio.stopAudioPlaying(); 

    playAudio.playFiles(langs[router.getLanguage()]['audio' + ((5 - cardNumber) || 6)]; 
}; 

但是,也許你應該緩存您的變量langs (和所有內容)不在該函數中,因爲它不會改變。

而只是保留你的函數中的最後兩行。