js数据格式转换?

作者站长头像
站长
· 阅读数 16
{
    "withDiffDeptPersonId": "00004833,00009278",
    "withDiffDeptCode": "30120832,30120832",
    "withDiffDeptPersonName": "米久华,罗贻泽",
    "withSameDeptPersonId": "00012765,00029927",
    "withSameDeptCode": "30120769,30000769",
    "withSameDeptPersonName": "王璐,潘燕玲"
}

上边格式如何转换为以下格式

[
    {
        "personId": "00004833",
        "deptCode": "30120832",
        "personName": "米久华",
        "isDiff": true
    },
    {
        "personId": "00009278",
        "deptCode": "30120832",
        "personName": "罗贻泽",
        "isDiff": true
    },
    {
        "personId": "00012765",
        "deptCode": "3012769",
        "personName": "王璐",
        "isDiff": false
    },
    {
        "personId": "00029927",
        "deptCode": "30000769",
        "personName": "潘燕玲",
        "isDiff": false
    }
]
回复
1个回答
avatar
test
2024-07-03

更新:这里看到多次getValues(key, '')的调用,强迫症促使我思考能不能优化掉,于是有了下面这段代码,但是更不容易看懂了

function transform(data) {
    const getValues = (mid, suffix) => data[`with${mid}Dept${suffix}`].split(',');
    const splitData = key => (values => values('PersonId').map((id, i) => ({
        personId: id,
        deptCode: values('Code')[i],
        personName: values('PersonName')[i],
        isDiff: key === 'Diff',
    })))(suffix => getValues(key, suffix));

    return splitData('Diff').concat(splitData('Same'))
}

transform({
    "withDiffDeptPersonId": "00004833,00009278",
    "withDiffDeptCode": "30120832,30120832",
    "withDiffDeptPersonName": "米久华,罗贻泽",
    "withSameDeptPersonId": "00012765,00029927",
    "withSameDeptCode": "30120769,30000769",
    "withSameDeptPersonName": "王璐,潘燕玲"
})

通过一个IIFE将这个传入的key函数柯里化,调用values('...')实际上相当于getValues(key, '...')


function transform(data) {
    const getValues = (mid, suffix) => data[`with${mid}Dept${suffix}`].split(',');
    const splitData = key => getValues(key,'PersonId').map((id, i) => ({
        personId: id,
        deptCode: getValues(key, 'Code')[i],
        personName: getValues(key, 'PersonName')[i],
        isDiff: key === 'Diff',
    }));

    return splitData('Diff').concat(splitData('Same'))
}

transform({
    "withDiffDeptPersonId": "00004833,00009278",
    "withDiffDeptCode": "30120832,30120832",
    "withDiffDeptPersonName": "米久华,罗贻泽",
    "withSameDeptPersonId": "00012765,00029927",
    "withSameDeptCode": "30120769,30000769",
    "withSameDeptPersonName": "王璐,潘燕玲"
})
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容