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

/**
* @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);

对象克隆及属性转换-JavaScript的更多相关文章

  1. javascript 对象克隆

    浅克隆 先看代码: /** * 浅克隆 克隆传入对象,只克隆一层 * @param {any} source */ function shallowClone(source) { var tiaget ...

  2. Java提高篇——对象克隆(复制)

    假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...

  3. C#对象克隆介绍

    浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...

  4. Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...

  5. js对象克隆, 深复制.

    亲测有效: //对象克隆 function clone(obj) { // Handle the 3 simple types, and null or undefined if (null == o ...

  6. (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

    原文地址:http://blog.csdn.net/kenthong/article/details/5758884 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的 ...

  7. Java对象克隆详解

    原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = appl ...

  8. 【java】对象克隆protected Object clone() throws CloneNotSupportedException

    package 对象克隆; class A implements Cloneable{//要具备clone()功能必须要实现Cloneable接口,此接口里无方法,只起标识作用. private St ...

  9. java 浅拷贝和深拷贝 对象克隆clone

    分一下几点讨论: 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 一:为什么要克隆? 大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗? 答案是:克隆的对象可能包 ...

随机推荐

  1. 安装selenium和chromedriver

    网上找的算法,在运行爬虫代码时,需要Selenium+Phantomjs实现,我改成了用Selenium+Chrome:针对指定网址,自动打开浏览器,输入关键词搜索,并保存搜索的内容. 1. 安装se ...

  2. hdwiki 附件上传大小设置

    1.进入服务器,找到 wamp 路径,搜索php.ini   ,参考   x:\wamp\usr\local\php\php.ini 文本打开,搜索  post_max_size  =  设置成要的值 ...

  3. hadoop2相对hadoop1有非常重大的改进

    hadoop2相对hadoop1有非常重大的改进. 下面看一下在HDFS和MapReduce方面的改进: HDFS Federation(HDFS联邦)federation-background[1] ...

  4. RK哈希(Rabin_Karp 哈希)

    Rabin_Karp 哈希通过比较hash值是否相等来比较每个字符串是否相等有概率出错(很小)字符串x1,x2,x3……xk基底e;模数mo;hash=(xk*e^0+xk-1*e^1+......+ ...

  5. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  6. QWidget窗体中使用Q_OBJECT后无法添加背景图片或背景色

    在继承自QWiget的窗体中,设置背景图片或背景色比较简单的方法是使用setStyleSheet()函数,比如在构造函数中可以这样来设置背景图片: this->setStyleSheet(&qu ...

  7. Hadoop生态圈-Flume的组件之自定义Sink

    Hadoop生态圈-Flume的组件之自定义Sink 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍sink相关的API使用两个小案例,想要了解更多关于API的小技 ...

  8. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  9. yearProgress.vue

    <template> <div class="progressbar"> <el-progress :text-inside="true&q ...

  10. poj 3686 Priest John's Busiest Day

    http://poj.org/problem?id=3683 2-sat 问题判定,输出一组可行解 http://www.cnblogs.com/TheRoadToTheGold/p/8436948. ...