为JSON对象补充详情:JavaScript函数与Promise的实现
解决方案:为Company对象附加员工详情
我来帮你搞定这个需求!咱们要做的就是把Company里仅存ID的员工列表,通过Util工具函数拉取到有效详情后,只把有对应详情的员工信息整合到Company对象里。下面是完整的实现步骤和代码:
1. 明确数据结构与工具函数(模拟示例)
先定义好示例的Company对象和Util工具函数(你可以直接替换成项目里的真实结构):
// 模拟的Company对象,仅存储员工ID列表 const company = { name: "Global Tech Inc.", employeeIds: [1001, 1002, 1003, 1004] }; // 模拟的Util工具函数,接收ID列表返回对应员工详情(部分ID可能无匹配详情) const Util = { getEmployeeDetails: (empIds) => { // 模拟接口返回:1001、1002、1004有详情,1003无详情 return [ { id: 1001, name: "Sarah Connor", role: "Software Engineer" }, { id: 1002, name: "John Doe", role: "UX Designer" }, { id: 1004, name: "Linda Park", role: "Product Manager" } ]; } };
2. 编写核心处理函数
这个函数会接收Company对象,调用Util获取详情后,只保留有有效详情的员工信息:
function attachEmployeeDetails(company) { // 调用Util获取所有匹配的员工详情 const employeeDetails = Util.getEmployeeDetails(company.employeeIds); // 遍历原ID列表,匹配详情并过滤无详情的项 const employeesWithValidDetails = company.employeeIds .map(empId => { // 找到当前ID对应的详情 const matchedDetail = employeeDetails.find(detail => detail.id === empId); // 只有详情存在时才返回整合后的对象,否则返回null return matchedDetail ? { ...matchedDetail } : null; }) // 过滤掉没有详情的null项 .filter(employee => employee !== null); // 返回更新后的Company对象(不修改原对象,保持纯函数特性) return { ...company, employees: employeesWithValidDetails }; }
3. 测试函数并展示结果
用你提供的write和newParagraph函数验证结果:
// 调用处理函数 const updatedCompany = attachEmployeeDetails(company); // 输出结果 write("原Company对象:"); write(JSON.stringify(company)); newParagraph(); write("更新后的Company对象(仅含有效详情的员工):"); write(JSON.stringify(updatedCompany));
代码说明
- 用扩展运算符(
...)复制原对象和详情,避免直接修改原数据,保证函数的纯性。 map遍历每个员工ID,通过find匹配对应详情,不存在则返回null。filter把null项过滤掉,最终只保留有有效详情的员工信息。- 完全符合ES6+语法,和你标注的
//jshint esnext:true兼容。
内容的提问来源于stack exchange,提问作者Prady Prady
相关产品推荐
相关产品推荐

