Automapper.js

Javascript 版的对象映射
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 常用JavaScript包
软件类型 开源软件
地区 国产
投 递 者 卫志泽
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

在C#项目开发中,我们经常需要很多对象模型,如视图模型、传输模型、领域模型、实体模型等,我相信很多开发的朋友都明白最头疼的无法使模型之间的赋值,传统的方法就是一一赋值。终于春天来了,AutoMapper 的出现让我们解放了,各种映射完全秒秒钟的事情。

最近在Javascript开发过程中也遇到了相同的需求,果断 github 搜索一番,纳尼?没有!!!没办法,谁叫我是代码工呢,果断撸一把,不一会,automapper.js 诞生了。

使用文档

<script src="automapper.js" type="text/javascript"></script>
  • 示例演示

// # 示例一

var srcObj = { name: "百小僧", age: 25, gender: '男' }; // 源类型
var destObj= { name: null, age: null, gender: null };   // 目标类型

// 创建映射关系
automapper.createMap("src","dest");
// 开始映射
automapper.map("src","dest",srcObj,destObj);
// 输出结果:
// srcObj => { name: "百小僧", age: 25, gender: '男' }
// destObj => { name: "百小僧", age: 25, gender: '男' }


// # 示例二

var srcObj = { name: "百小僧", age: 25, gender: '男' }; // 源类型
var destObj = { firstName: null, age: null, sex: null, birthday: null };    // 目标类型

// 创建映射关系
automapper.createMap("src", "dest")
    .forMember("firstName", function (src, dest) { return "Mr." + src.name })
    .forMember("sex", srcObj.gender)
    .forMember("birthday", '1993-05-27');
// 开始映射
automapper.map("src", "dest", srcObj, destObj);
// 输出结果:
// srcObj => { name: "百小僧", age: 25, gender: '男' }
// destObj => {firstName: "Mr.百小僧", age: 25, sex: "男", birthday: "1993-05-27"}


automapper.js 目前还是第一版,实现代码也非常简单

; !function (win) {
    "use strict";

    var AutoMapper = function () {
        this.profiles = {};
        this.version = '1.0.0';
    };

    AutoMapper.prototype.createMap = function (srcKey, destKey) {
        var that = this, combineKey = srcKey + "->" + destKey;
        if (!that.profiles.hasOwnProperty(combineKey)) that.profiles[combineKey] = {};

        var funcs = {
            forMember: function (prop, any) {
                that.profiles[combineKey][prop] = any;
                return funcs;
            }
        };
        return funcs;
    };

    AutoMapper.prototype.map = function (srcKey, destKey, srcObj, destObj) {
        var that = this, combineKey = srcKey + "->" + destKey;
        if (!that.profiles.hasOwnProperty(combineKey)) throw "Could not find mapping with a source of " + srcKey + " and a destination of " + destKey;

        var profile = that.profiles[combineKey];
        for (var prop in destObj) {
            if (!profile.hasOwnProperty(prop)) destObj[prop] = srcObj.hasOwnProperty(prop) ? srcObj[prop] : destObj[prop];
            else {
                var output = profile[prop];
                if (typeof output === "function") destObj[prop] = output(srcObj, destObj);
                else destObj[prop] = output;
            }
        }
    };

    win.automapper = new AutoMapper();
}(window);
  • AutoMapper的使用场景 AutoMapper是对象到对象的映射工具。在完成映射规则之后,AutoMapper可以将源对象转换为目标对象。 一般情况下,表现层与应用层之间是通过DTO(数据传输对象Data Transfer Object)来进行交互的,数据传输对象是没有行为的POCO对象(简单CLR对象Plain Old CLR Object),他的目的是为了对领域对象进行数据封装,实现层与

  • AutoMapper于2019.8.12升级9.0 从此不再支持静态的对象转换 自己琢磨了一下,写了一套扩展 官方链接如下 https://github.com/AutoMapper/AutoMapper/tree/v9.0.0 我做了一下方便使用的简单封装 public static class AutoMapperExtension { public static I

  • 一些orm框架,在用到Entity的时候有一些开源代码用到了automapper(如:nopcommence),将数据对象转成DTO。比如在ORM中,与数据库交互用的Model模型是具有很多属性变量方法神马的。而当我们与其它系统(或系统中的其它结构)进行数据交互时,出于耦合性考虑或者安全性考虑或者性能考虑(总之就是各种考虑),我们不希望直接将这个Model模型传递给它们,这时我们会创建一个贫血模型

  • 什么是AutoMapper? 在多层结构中,经常用到对象到对象的转化,比如数据库Entity到Model的转化,Model和ViewModel的转换,手工去写复制太过麻烦。AutoMapper就是一个可以实现自动转换的类库。 AutoMapper是一个对象与对象的映射器。对象-对象映射通过将一种类型的输入对象转换为不同类型的输出对象来工作。让AutoMapper感兴趣的是,它提供了一些有趣的约定,

  • 跳转总目录 1、Autojs是什么, 能做什么? 不需要 Root 权限的JavaScript自动化软件 基于无障碍服务接口 8.0pro版官网: https://pro.autojs.org/ 开发APP脚本 自动化操作、引流脚本,游戏脚本、简单app 2、Autojs各版本之间的区别 4.1.1版本 4.1.1版本是免费版。 此视频教程主要基于4.1.1版本来讲解。 7.0.0pro版本 7.

  • 在选项中设置CreateMissingTypeMaps为true: var dto = Mapper.Map (foo, opts => opts.CreateMissingTypeMaps = true); 如果您需要经常使用它,请将lambda存储在委托字段中: static readonly Action _mapperOptions = opts => opts.CreateMissing

  • 示例 初始化 Mapper.Initialize(cfg => {cfg.CreateMap<Order,OrderListViewModel>();} Profile public class Order { public decimal Amount { get; set; } } public class OrderListViewModel

  • AutoMapper在MVC中的运用-映射中的忽略、处理null、多种映射转换 在项目中通过Nuget添加一个AutoMapper插件 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication

  • AutoMapper 帮我我们方便管理物件跟物件之间属性值格式转换   模型转换 这里有两个类别 UserInfoModel 当作我们从DB捞取出来模型资料 public class UserInfoModel { public int RowId { get; set; } public string Name { get; set; } public int Age { get; set

  • 常规操作代码 /* Time: 2020年12月1日 17:34:19 By : MemoryEr QQ : 1762272313 */ function WebGetDataOne() { var wz = "http://www.baidu.com" var GetData = http.get(wz).body.string() log(GetData)

 相关资料
  • 假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?

  • 我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误:

  • 问题内容: 我试图使用Java将DO转换为DTO,并在开始编写自己的工具之前寻找自动化工具。我只是想知道是否有可用的免费工具。 问题答案: Dozer是Java Bean到Java Bean的映射器,可将数据从一个对象递归复制到另一个对象。通常,这些Java Bean将具有不同的复杂类型。 推土机支持简单的属性映射,复杂的类型映射,双向映射,隐式-显式映射以及递归映射。这包括映射集合属性,这些属性

  • 我刚刚发现了这个特性: Map:Map对象是简单的键/值映射。 映射对象可以按插入顺序迭代其元素。Map对象必须使用哈希表或其他机制来实现,这些机制平均提供的访问时间与集合中的元素数成次线性关系。本地图对象规范中使用的数据结构仅用于描述地图对象所需的可观察语义。它并不打算成为一个可行的实施模式。 …对我来说仍然像是一个对象,所以很明显我错过了什么。 为什么JavaScript获得了一个(支持良好的

  • 在对象(Object,也称实体Entity)、文档(Document)之间实现自动转换,是bugu-mongo的最核心功能,这能让你直接用面向对象的概念来操作MongoDB数据库,而不用去关心底层的数据库细节。 在这方面,bugu-mongo提供了: 注解: @Entity @Id @Property @Embed @EmbedList @Ref @RefList @Ignore @CustomC

  • 我想使用Java流按对用户列表进行分组。 例如,我有。

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!