【问题标题】:Make javascript code simpler using for loop使用 for 循环使 javascript 代码更简单
【发布时间】:2014-10-27 00:48:30
【问题描述】:

我是 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));
    }
};

【问题讨论】:

标签: javascript for-loop


【解决方案1】:

不使用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]);
};

【讨论】:

    【解决方案2】:

    我会这样做:

    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(以及其中的所有内容)缓存到函数之外,因为它不会改变。

    只保留函数中的最后两行。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      相关资源
      最近更新 更多