2017-07-04 81 views
2

我有以下功能很好,但我想確保如果提供的zone不存在,它使用default區域密鑰。檢查哈希表是否存在密鑰,否則默認爲存在並返回該值的東西

module.exports = (zone, key) => { 

    const zones = { 
    default: require('./default'), 
    northeast: require('./northeast'), 
    centralCoast: require('./centralCoast') 
    }; 

    return zones[zone][key]; 
} 

是否有更酷的方式在返回語句中直接執行此操作?現在,我只是用一個條件檢查檢查,如果我得到什麼,但不確定和返回..

我如何檢查zonezonesnortheast, centralCoast等之一,但如果有人經過western它會只是返回值default

+0

我不完全理解你的代碼,你要返回語言環境,但是你的對象被聲明爲區域。然後,什麼是關鍵參數? –

+0

對不起,這些都只是地圖,所以例如,如果你需要這個特定的功能,稱之爲'example',並執行像'example('northeast','shipping')['some-value']'那麼它將返回該值。 – user1354934

+0

我假設'locales'應該和'zones'一樣嗎? – nem035

回答

1

您可以使用簡單的三元運算符來實現return語句中的條件邏輯。您還可以使用箭頭功能,省去由指定明確return

module.exports = (zone, key) => zones[zone] 
    ? zones[zone][key] 
    : zones.default[key]; 

我建議也將一些靜態的(非變化碼)功能之外,所以它沒有不必要的每個函數調用執行:

// move constants outside of the function because there's no need to recreate them on each function call 
const zoneNames = ['default', 'northeast', 'centralCoast']; 

// import the zones dynamically 
// this way, adding new zones requires only adding a string to the array above 
const zones = zoneNames.reduce((zones, zoneName) => { 
    zones[zoneName] = require(zoneName); 
    return zones; 
}, {}); 

module.exports = (zone, key) => zones[zone] 
    ? zones[zone][key] 
    : zones.default[key]; 
相關問題