Ecmascript 6 ES6:如何从嵌套的JS对象/对象数组中获取值,而不使用Switch case语句

Ecmascript 6 ES6:如何从嵌套的JS对象/对象数组中获取值,而不使用Switch case语句,ecmascript-6,webdriver-io,Ecmascript 6,Webdriver Io,ES6:如何从嵌套的JS对象/对象数组中获取值,而不使用Switch case语句来检索定位器值 但是我们不想使用开关case语句 请就函数式编程方案提供建议 let selector = null; browser.timeoutsImplicitWait(3000); const LOCATORS = { topFilterIcon: 'AXY', tabHeadings: { IOS_SELCT: { ValueTab: 'bla', UnitsTa

ES6:如何从嵌套的JS对象/对象数组中获取值,而不使用Switch case语句来检索定位器值

但是我们不想使用
开关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 ');
}

如有必要,我们可以将上述嵌套对象转换为对象数组/贴图。谢谢,我应该把顶层结构做成对象数组吗?我想你可以,但这不是必须的。很抱歉有个小问题,你能推荐一些关于ES6/JS的阅读材料吗?对于从Java切换到it的人。谢谢,洛蒂我不知道,但一点点搜索就会发现。快速学习的一个好方法是参与一些挑战,比如代码战,并以这种方式提高技能。