js数据格式转换?
{
"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个回答

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": "王璐,潘燕玲"
})
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容