ES6:如何在不使用 Switch-case 语句的情况下从对象的嵌套 JS object/Array 中获取值

ES6: How to get values from nested JS object/Array of objects, without using Switch-case statement

ES6:如何在不使用 Switch-case 语句的情况下从对象的嵌套 JS object/Array 中获取值,以检索定位器值。

但是我们不想使用switch-case语句。

请就函数式编程替代方案提出建议

let selector = null;
browser.timeoutsImplicitWait(3000);
const LOCATORS = {
topFilterIcon: 'AXY',
tabHeadings: {
    IOS_SELCT: {
        ValueTab: 'bla',
        UnitsTab: 'bla2',
        PriceTab: 'bla3'
    },
    ANDROID_SELECT: {
        ValueTab: 'abc1',
        UnitsTab: 'abc3',
        PriceTab: 'abc4'
    }
},

};

我们要用函数式编程替换的代码如下:

    switch (heading.toString().toLowerCase()) {
case 'value':
    selector = browser.isIOS ? LOCATORS.tabHeadings.IOS_SELCT.ValueTab : LOCATORS.tabHeadings.ANDROID_SELECT.ValueTab;
    break;
case 'units':
    selector = browser.isIOS ? LOCATORS.tabHeadings.IOS_SELCT.UnitsTab : LOCATORS.tabHeadings.ANDROID_SELECT.UnitsTab;
    break;
case 'price':
    selector = browser.isIOS ? LOCATORS.tabHeadings.IOS_SELCT.PriceTab : LOCATORS.tabHeadings.ANDROID_SELECT.PriceTab;
    break;
default:
    throw new Error('\n Error: Incorrect value received on Market Section ');
}

请指教谢谢

您可以将密钥转化为您想要得到的对应密钥:

let key = heading.toString();
key = key[0].toUpperCase() + key.slice(1).toLowerCase() + "Tab"
const selector = LOCATORS.tabHeadings[browser.isIOS ? "IOS_SELCT" : "ANDROID_SELECT"][key];
if (selector === undefined) {
    throw new Error('\n Error: Incorrect value received on Market Section ');
}