首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将对象键从蛇箱转换为骆驼箱的最佳方法是什么,反之亦然?

将对象键从蛇箱转换为骆驼箱的最佳方法是什么,反之亦然?
EN

Stack Overflow用户
提问于 2019-07-23 16:16:53
回答 2查看 2.3K关注 0票数 1

我有一个来自服务器的响应,结构如下:

代码语言:javascript
运行
复制
{
    is_separate_page: true,
    is_blank_page: true,
    is_instructions_page: false,
    is_letter_paper: true,
    is_pressure_seal_paper: false,
    is_mask_ssn_on_letter_paper: true,
    is_mask_ssn_on_pressure_seal_paper: true,
    is_pdf_encrypted_on_letter_paper: false,
    is_pdf_encrypted_on_pressure_seal_paper: true
}

然后,我使用以下助手函数将值转换为camel case语法,以将其存储在function组件状态中:

代码语言:javascript
运行
复制
// Destructuring approach

transformInitialCheckboxesState = data => {
        const {
            is_show_mask_ssn_field: isShowMaskSSNField,
            is_separate_page: isSeparatePage,
            is_blank_page: isBlankPage,
            is_instructions_page: isInstructionsPage,
            is_letter_paper: isLetterPaper,
            is_pressure_seal_paper: isPressureSealPaper,
            is_mask_ssn_on_letter_paper: isMaskSSNonLetterPaper,
            is_mask_ssn_on_pressure_seal_paper: isMaskSSNonPressureSealPaper,
            is_pdf_encrypted_on_letter_paper: isPDFEncryptedOnLetterPaper,
            is_pdf_encrypted_on_pressure_seal_paper: isPDFEncryptedOnPressureSealPaper,
        } = data

        return {
            isShowMaskSSNField,
            isSeparatePage,
            isBlankPage,
            isInstructionsPage,
            isLetterPaper,
            isPressureSealPaper,
            isMaskSSNonLetterPaper,
            isMaskSSNonPressureSealPaper,
            isPDFEncryptedOnLetterPaper,
            isPDFEncryptedOnPressureSealPaper,
        }
    }

对于提交值,我应该执行相反的操作,以便根据后端的需要准备密钥:

代码语言:javascript
运行
复制
    preparePayloadCheckboxesState = data => {
        const {
            isShowMaskSSNField: is_show_mask_ssn_field,
            isSeparatePage: is_separate_page,
            isBlankPage: is_blank_page,
            isInstructionsPage: is_instructions_page,
            isLetterPaper: is_letter_paper,
            isPressureSealPaper: is_pressure_seal_paper,
            isMaskSSNonLetterPaper: is_mask_ssn_on_letter_paper,
            isMaskSSNonPressureSealPaper: is_mask_ssn_on_pressure_seal_paper,
            isPDFEncryptedOnLetterPaper: is_pdf_encrypted_on_letter_paper,
            isPDFEncryptedOnPressureSealPaper: is_pdf_encrypted_on_pressure_seal_paper,
        } = data

        return {
            is_show_mask_ssn_field,
            is_separate_page,
            is_blank_page,
            is_instructions_page,
            is_letter_paper,
            is_pressure_seal_paper,
            is_mask_ssn_on_letter_paper,
            is_mask_ssn_on_pressure_seal_paper,
            is_pdf_encrypted_on_letter_paper,
            is_pdf_encrypted_on_pressure_seal_paper,
        }
    }

问题是:在我的观点上,它看起来非常相似和可重复,在您的观点上减少这段代码的最好和最优雅的方法是什么?

EN

Stack Overflow用户

发布于 2019-07-23 16:39:04

您可以创建映射对象和转换函数:

代码语言:javascript
运行
复制
const mapping = {
    "is_show_mask_ssn_field" : "isShowMaskSSNField",
    "is_separate_page": "isSeparatePage",
    ... other properties
}

const fromServer = (data) => {
    let obj = {};
    for (var prop in data) {
        var realName = mapping[prop];
        if (realName) {
            obj[realName] = data[prop];
        }
    }
    return obj;
}

const toServer = (data) => {
    let obj = {};
    for (var serverName in mapping) {
        var realName = mapping[serverName];
        if (data.hasOwnProperty(realName)) {
            obj[serverName] = data[realName];
        }
    }
    return obj;
}

因此,在将数据发送到服务器之前,只需从端点接收数据并调用模型上的fromServertoServer即可。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57168365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档