Javascript 版的对象映射 Automapper.js

码农软件 · 软件分类 · 常用JavaScript包 · 2019-04-04 17:42:48

软件介绍

在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);

本文地址:https://codercto.com/soft/d/2858.html

C标准库

C标准库

P. J. Plauger / 卢红星、徐明亮、霍建同 / 人民邮电出版社 / 2009-7 / 79.00元

本书是由世界级C语言专家编写的C标准库经典著作。英文版已经重印十多次,影响了几代程序员。 本书结合C标准的相关部分,精辟地讲述了每一个库函数的使用方法和实现细节,而这正是一个真正的C程序员所必须掌握的。更重要的是,书中给出了实现和测试这些函数的完整源代码,可以让你更深入地学习C语言。不仅如此,本书还讨论了一些即使是最有经验的C程序员通常也不熟悉的知识,比如国际化和独立于区域设置的程序的编写、......一起来看看 《C标准库》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具