如何构建通用函数实现对象数组按指定模型标准化?
通用对象数组标准化解决方案
我来帮你搞定这个通用的对象标准化函数!你的现有实现确实是硬编码了id和nome属性,只能适配特定场景,咱们来改成能兼容任意模型对象的通用版本。
实现思路
要满足你的三个处理目标,核心是基于模型动态处理每个对象:
- 先提取模型的所有属性名,作为标准化的基准
- 对数组里的每个对象:
- 保留和模型匹配的属性及其原有值
- 自动剔除模型中不存在的属性
- 给模型有但当前对象缺失的属性赋值
null
通用代码实现
const padronizarCom = (modelo, arrayObjetos) => { // 提取模型对象的所有属性名,作为标准化的基准列表 const propriedadesModelo = Object.keys(modelo); // 遍历数组,对每个对象进行标准化处理 return arrayObjetos.map(objeto => { const resultado = {}; // 逐个处理模型中的每个属性 propriedadesModelo.forEach(prop => { // 存在则保留原值,不存在则设为null resultado[prop] = prop in objeto ? objeto[prop] : null; }); return resultado; }); }; // 测试你的示例场景 console.log(padronizarCom({id: 1, nome:'abcd'}, [{nome:'Carlos', idade:30}, {a:'x', b:'y', c:'z'}])); // 输出结果: // [ { nome: 'Carlos', id: null }, { nome: null, id: null } ]
代码说明
Object.keys(modelo):动态获取模型的所有属性名,这一步让函数完全摆脱了对特定属性的依赖,适配任意结构的模型arrayObjetos.map(...):遍历输入数组并返回新数组,不会修改原数组的内容,符合函数式编程的最佳实践- 遍历模型属性时,通过
prop in objeto判断属性是否存在,既保留了匹配属性的原值,又自动过滤了模型外的属性,同时补全缺失属性为null,一次性满足所有需求
可选扩展(按需使用)
如果后续需要支持嵌套对象的标准化、或者属性默认值自定义等复杂场景,可以在这个基础上进一步扩展,但针对当前的需求,上面的代码已经完全够用啦。
内容的提问来源于stack exchange,提问作者Carlos Henrique
相关产品推荐
相关产品推荐

