动态修改对象:根据子项数量扩展文件上传对象结构
动态扩展文件类别对象的实现方法
方法一:基础循环法
逻辑直观,适合快速理解实现思路:
// 初始化文件对象,避免直接修改原始数据 const files = { BIRTH_CERTIFICATE: values.files.BIRTH_CERTIFICATE, RESUME: values.files.RESUME, }; // 根据子项数量循环添加对应属性 for (let i = 1; i <= childrenCount; i++) { const key = `CHILDREN_BIRTH_CERTIFICATE_${i}`; // 可选:若需处理values.files中无对应键的情况,可添加判断 // if (values.files.hasOwnProperty(key)) { files[key] = values.files[key]; // } }
方法二:用Object.fromEntries简化代码
借助数组与对象转换的API,让代码更简洁紧凑:
// 生成动态子项证书的键值对对象 const childrenCertificates = Object.fromEntries( Array.from({ length: childrenCount }, (_, index) => { const seq = index + 1; const key = `CHILDREN_BIRTH_CERTIFICATE_${seq}`; return [key, values.files[key]]; }) ); // 合并初始对象与动态生成的对象 const files = { BIRTH_CERTIFICATE: values.files.BIRTH_CERTIFICATE, RESUME: values.files.RESUME, ...childrenCertificates };
方法三:一步到位的简洁写法
直接在对象字面量中完成合并,减少中间变量:
const files = { BIRTH_CERTIFICATE: values.files.BIRTH_CERTIFICATE, RESUME: values.files.RESUME, // 动态生成并展开子项证书属性 ...Object.fromEntries( Array.from({ length: childrenCount }, (_, i) => { const key = `CHILDREN_BIRTH_CERTIFICATE_${i + 1}`; return [key, values.files[key]]; }) ) };
注意事项
- 若
values.files中可能不存在对应序号的子项证书键,可添加默认值处理:return [key, values.files[key] ?? null]; // 用null替代undefined - 所有方法均未修改原始的
values.files对象,保证了数据不可变性(若业务允许直接修改,也可省略对象复制步骤)。
内容的提问来源于stack exchange,提问作者Cucumberbatch
相关产品推荐
相关产品推荐

