当前位置:首页 > JavaScript

js实现automapper

2026-03-13 20:16:13JavaScript

实现 Automapper 的 JavaScript 方案

Automapper 是一种用于对象属性映射的工具,常用于将数据从一种对象结构转换为另一种。以下是几种在 JavaScript 中实现类似功能的方法:

手动映射

最基础的方法是手动编写映射逻辑,适用于简单场景:

const source = { name: 'Alice', age: 25 };
const target = {
    fullName: source.name,
    userAge: source.age
};

使用 Lodash 的 _.mapKeys

Lodash 提供了便捷的对象操作函数:

js实现automapper

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 库提供更完整的解决方案:

  1. automapper-ts (TypeScript 优先):

    js实现automapper

    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);
  2. 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 方案

每种方案都有其适用场景,应根据项目复杂度、性能要求和团队偏好进行选择。

标签: jsautomapper
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…