js实现automapper
实现 Automapper 的 JavaScript 方案
Automapper 是一种用于对象属性映射的工具,常用于将数据从一种对象结构转换为另一种。以下是几种在 JavaScript 中实现类似功能的方法:
手动映射
最基础的方法是手动编写映射逻辑,适用于简单场景:
const source = { name: 'Alice', age: 25 };
const target = {
fullName: source.name,
userAge: source.age
};
使用 Lodash 的 _.mapKeys
Lodash 提供了便捷的对象操作函数:
const _ = require('lodash');
const source = { name: 'Alice', age: 25 };
const target = _.mapKeys(source, (value, key) => {
const mapping = { name: 'fullName', age: 'userAge' };
return mapping[key] || key;
});
专用 Automapper 库
专门为 JavaScript 设计的 automapper 库提供更完整的解决方案:
-
automapper-ts (TypeScript 优先):
import { AutoMapper } from 'automapper-ts'; const mapper = new AutoMapper(); mapper.createMap('Source', 'Target') .forMember('fullName', opts => opts.mapFrom('name')) .forMember('userAge', opts => opts.mapFrom('age')); const target = mapper.map('Target', source); -
object-mapper:
const objectMapper = require('object-mapper'); const map = { 'name': 'fullName', 'age': 'userAge' }; const target = objectMapper(source, map);
自定义映射函数
可以创建通用映射函数处理复杂场景:
function mapObject(source, mapping) {
return Object.keys(mapping).reduce((acc, targetKey) => {
const sourceKey = mapping[targetKey];
acc[targetKey] = typeof sourceKey === 'function'
? sourceKey(source)
: source[sourceKey];
return acc;
}, {});
}
// 使用示例
const result = mapObject(
{ name: 'Bob', age: 30 },
{ fullName: 'name', isAdult: (src) => src.age >= 18 }
);
ES6 Proxy 实现
对于需要动态映射的场景,可以使用 Proxy:

function createMapper(rules) {
return source => new Proxy({}, {
get(target, prop) {
const rule = rules[prop];
return typeof rule === 'function' ? rule(source) : source[rule];
}
});
}
// 使用示例
const mapper = createMapper({
fullName: 'name',
birthYear: src => new Date().getFullYear() - src.age
});
const target = mapper({ name: 'Charlie', age: 40 });
选择建议
- 简单项目:手动映射或 Lodash
- 大型项目:考虑 automapper-ts 或 object-mapper
- 需要完全控制:自定义映射函数
- 动态需求:Proxy 方案
每种方案都有其适用场景,应根据项目复杂度、性能要求和团队偏好进行选择。






