当前位置:首页 > 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 提供了便捷的对象操作函数:

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 优先):

    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:

js实现automapper

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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…