求助:如何在JavaScript中根据对象值提取并转换数据格式
JavaScript 对象转换解决方案
实现思路
要完成从输入格式到目标格式的转换,核心是拆解权限编码规则、建立映射关系,再提取所需字段组装结果:
- 直接提取原对象的
name字段; - 从权限编码中提取页面名称,将下划线替换为中划线;
- 建立权限动作(如
can_read、can_update)与目标权限标识(如(list)、(edit))的映射; - 遍历所有权限,收集并去重映射后的标识,用
|拼接成字符串。
代码实现
// 输入数据 const inputData = { "id": 6, "createdAt": "2024-07-24T11:33:05.749Z", "updatedAt": "2024-07-24T11:33:05.749Z", "deletedAt": null, "name": "vendor_cashier", "permissions": [ {"id": 18,"createdAt": "2024-07-24T11:33:05.683Z","updatedAt": "2024-07-24T11:33:05.683Z","deletedAt": null,"code": "can_read_pos_device"}, {"id": 19,"createdAt": "2024-07-24T11:33:05.683Z","updatedAt": "2024-07-24T11:33:05.683Z","deletedAt": null,"code": "can_update_pos_device"} ] }; // 权限动作与目标标识的映射表 const permissionMap = { 'can_read': ['(list)', '(show)'], 'can_update': ['(edit)'], 'can_create': ['(create)'], 'can_delete': ['(delete)'] }; // 转换函数 function transformData(data) { // 提取角色名称 const name = data.name; // 提取页面名称(从第一个权限编码中解析) const firstPermission = data.permissions[0]; let page = ''; if (firstPermission) { const [, , ...pageParts] = firstPermission.code.split('_'); page = pageParts.join('_').replace('_', '-'); } // 收集所有权限标识(自动去重) const permissionSet = new Set(); data.permissions.forEach(perm => { const action = perm.code.split('_').slice(0, 2).join('_'); const mappedPermissions = permissionMap[action] || []; mappedPermissions.forEach(p => permissionSet.add(p)); }); // 拼接权限字符串 const permissions = Array.from(permissionSet).join('|'); return { name, page, permissions }; } // 执行转换并输出结果 const output = transformData(inputData); console.log(JSON.stringify(output, null, 2));
输出结果
运行上述代码后,将得到符合要求的JSON:
{ "name": "vendor_cashier", "page": "pos-device", "permissions": "(list)|(show)|(edit)" }
内容的提问来源于stack exchange,提问作者Ahmed Elhoseny
相关产品推荐
相关产品推荐

