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

/**
* @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. Gym - 101522H Hit!

    H. Hit! time limit per test 1.0 s memory limit per test 256 MB input standard input output standard ...

  2. Rust 阴阳谜题,及纯基于代码的分析与化简

    Rust 阴阳谜题,及纯基于代码的分析与化简 雾雨魔法店专栏 https://zhuanlan.zhihu.com/marisa 来源 https://zhuanlan.zhihu.com/p/522 ...

  3. oracle函数验证时间格式并返回

    CREATE OR REPLACE FUNCTION WSW(parameter VARCHAR2) RETURN DATE IS val DATE; BEGIN IF (REGEXP_INSTR(p ...

  4. Codechef Sad Pairs——圆方树+虚树+树上差分

    SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2 ...

  5. HDU 6181 第k短路

    Two Paths Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 153428/153428 K (Java/Others)Total ...

  6. 如何构建 Redis 高可用架构?

    温国兵 民工哥技术之路 今天 1 .题记 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. 如今,互 ...

  7. django-pure-pagination 分页插件

    官网地址:https://github.com/jamespacileo/django-pure-pagination 官网上有详细的安装和使用介绍

  8. map文件的使用

    map文件相信大家并不陌生,大家都知道是用来调试的,但是具体怎么用你又清不清楚呢? 其实也很简单 1.拿JQ为例,我们需要备有jquery.js.jquery.min.js.jquery.min.ma ...

  9. node.js浅谈

    相信大家对node.js也很不陌生吧,现在我来总结一下常用的吧~ 我们Web全栈工程师最多的就是用Node作为后台了,Node.js虽然可以作为后台语言,但是相对于Java那些老牌后台语言真是一点优势 ...

  10. Knowledge Tracing -- 基于贝叶斯的学生知识点追踪(BKT)

    目前,教育领域通过引入人工智能的技术,使得在线的教学系统成为了智能教学系统(ITS),ITS不同与以往的MOOC形式的课程.ITS能够个性化的为学生制定有效的 学习路径,通过根据学生的答题情况追踪学生 ...