如何用Lodash/JS将对象数组中disease_type_id值映射到id键?
简洁高效的Lodash键映射实现方案
嘿,这个需求其实很容易搞定,而且有几种简洁又高效的方式能满足你的要求,同时保持代码的可读性:
1. 解构时直接重命名(最推荐)
这是最直观且代码量最少的写法,在解构原对象时直接把disease_type_id别名成id,然后返回新对象即可:
this.inspection.diseases = _.map(inspection.diseases, ({ disease_type_id: id, name }) => ({ id, name }));
这种写法完美承接了你原有的逻辑,既完成了指定键的提取,又实现了键名映射,可读性拉满,而且Lodash的map本身就是经过优化的高效实现,没有额外性能损耗。
2. 批量键映射方案(适合多键场景)
如果你之后可能需要对更多键进行重命名,不妨提前定义一个键映射规则,配合_.reduce批量处理,扩展性更强:
// 统一管理键映射规则 const keyMapping = { disease_type_id: 'id', name: 'name' // 不需要重命名的键也可以放在这里,方便统一维护 }; this.inspection.diseases = _.map(inspection.diseases, (item) => _.reduce(keyMapping, (result, newKey, oldKey) => { result[newKey] = item[oldKey]; return result; }, {}) );
这种方式虽然代码稍长,但后续修改或添加键映射时,只需要调整keyMapping对象即可,维护起来更省心。
额外:原生JS替代方案(无依赖版)
如果你之后考虑减少第三方依赖,原生JS的Array.map也能实现完全一样的效果,写法和Lodash版本几乎一致:
this.inspection.diseases = inspection.diseases.map(({ disease_type_id: id, name }) => ({ id, name }));
原生写法同样简洁高效,而且不需要额外引入库。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

