zoukankan      html  css  js  c++  java
  • 对象克隆及属性转换-JavaScript

    在某些项目中,需要将一些返回信息进行其他语言的翻译,可以为不同语言用户提供不同的语言版本。下面是一个实现:

    /**
     * @class Translate
     * @description 查询字典,翻译成相应的语言
     * @author jerishi
     * @2016.6.15
     */
    var mapObj = {
        'test01': '测试01',
        'test02': '测试02',
        'test03': '测试03',
        'test04': '测试04'
    };
    var targetObj = {
        '1': 'test01',
        '2': 'test02',
        '3': undefined,
        '4': {
            '4': 'test04',
            '3': 'test03',
            '2': 'test02'
        },
        '5': {
            '1': 'test01',
            '2': 'test02',
            '3': 'test03',
            '4': {
                '4': 123,
                '3': 'test03',
                'G': ['test03', 'test02', 3]
            }
        }
    };
    
    var Translate = {
        /**
         * 克隆对象
         * @param  {object} obj 
         * @return {object}  
         */
        clone: function(obj) {
            var _self = this;
            // 简单数据类型直接返回
            if (obj == null) {
                return obj;
            }
            if (typeof obj != 'object') {
                return obj;
            }
            // 复制复杂对象
            var result = new obj.constructor();
            for (var prop in obj) {
                result[prop] = _self.clone(obj[prop]);
            }
            return result;
        },
        /**
         * 从字典里寻找目标词汇翻译
         * @param  {object} mapTest 字典对象
         * @param  {string} target  目标词汇
         * @return {string}         返回目标词汇查询结果
         */
        mapStr: function(mapObj, target) {
            // 默认值
            var result = target;
            // 查询字典
            $.each(mapObj, function(key, value) {
                if (key === target) {
                    result = value;
                }
            });
            return result;
        },
        /**
         * 翻译对象属性值(深层遍历)
         * @param  {object} dictionaryObj 字典对象
         * @param  {object} targetObj     目标对象
         * @return {object}               翻译结果
         */
        mapObj: function(dictionaryObj, targetObj) {
            var _self = this;
            for (var prop in targetObj) {
                var target = targetObj[prop];
                if (typeof target == 'string') {
                    targetObj[prop] = _self.mapStr(dictionaryObj, target);
                } else {
                    _self.mapObj(dictionaryObj, target);
                }
            }
            return targetObj;
        },
        /**
         * 克隆目标对象,并翻译
         * @param  {object} dictionaryObj 字典对象
         * @param  {object} targetObj     目标对象
         * @return {object}               翻译结果
         */
        translate: function(dictionaryObj, targetObj) {
            var _self = this;
            // 克隆目标对象,不影响原对象
            var _targetObj = _self.clone(targetObj);
            // 翻译对象属性值
            var result = _self.mapObj(dictionaryObj, _targetObj);
            return result;
        }
    }
    
    console.log(Translate.translate(mapObj, targetObj));
    console.log(targetObj);
  • 相关阅读:
    nop调试-区域路由问题
    nop4.3 用户权限管理
    nop4.3 admin中添加新菜单
    nop 中创建任务(Task)
    SignalR 的应用
    mvc和ef如何连接
    .net中微信、支付宝回调
    C# 中使用Aspose.Words下载文档
    添加 Azure Active Directory 服务,调用方法
    Net Core 5.0 部署IIS错误-500.31-Failed to load ASP.NET Core runtime
  • 原文地址:https://www.cnblogs.com/syfwhu/p/5590304.html
Copyright © 2011-2022 走看看