对象克隆及属性转换-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);
对象克隆及属性转换-JavaScript的更多相关文章
- javascript 对象克隆
浅克隆 先看代码: /** * 浅克隆 克隆传入对象,只克隆一层 * @param {any} source */ function shallowClone(source) { var tiaget ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- C#对象克隆介绍
浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...
- js对象克隆, 深复制.
亲测有效: //对象克隆 function clone(obj) { // Handle the 3 simple types, and null or undefined if (null == o ...
- (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
原文地址:http://blog.csdn.net/kenthong/article/details/5758884 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的 ...
- Java对象克隆详解
原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = appl ...
- 【java】对象克隆protected Object clone() throws CloneNotSupportedException
package 对象克隆; class A implements Cloneable{//要具备clone()功能必须要实现Cloneable接口,此接口里无方法,只起标识作用. private St ...
- java 浅拷贝和深拷贝 对象克隆clone
分一下几点讨论: 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 一:为什么要克隆? 大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗? 答案是:克隆的对象可能包 ...
随机推荐
- Java 多线程初级汇总
多线程概述 抢占式多任务 直接中断而不需要事先和被中断程序协商 协作多任务 被中断程序同意交出控制权之后才能执行中断 多线程和多进程区别? 本质的区别在于每个进程有它自己的变量的完备集,线程则共享相同 ...
- centos 7使用docker安装lnmp和redis环境
#================Docker基础操作========================== #启动docker服务service docker start#搜索可用docker镜像#h ...
- PostgreSQL(一)教程 -----SQL语言
一.概念 PostgreSQL是一种关系型数据库管理系统 (RDBMS).这意味着它是一种用于管理存储在关系中的数据的系统.关系实际上是表的数学术语. 今天,把数据存储在表里的概念已经快成了固有的常识 ...
- Linux上shell脚本date的用法
在shell脚本里date命令的用法: %% 一个文字的 % %a 当前locale 的星期名缩写(例如: 日,代表星期日) %A 当前locale 的星期名全称 (如:星期日) %b 当前local ...
- SSO后期补充理解
sso系统的提出: 为什么会产生sso系统呢?它的作用是什么?这跟普通的登录系统有什么区别? 我们先来说说session的实现原理:session跟cookie都是用户的会话跟踪技术,为什么登录成功后 ...
- Java基础-Java数据类型
Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
- Spring RedisTemplate操作-哈希操作(3)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- Java入门系列(七)Java 集合框架(JCF, Java Collections Framework)
Java 集合概述 List.Set.Map可以看做集合的三大类 java集合就像一个容器,可以将多个对象的引用丢进该容器中. Collection和Map是java集合的根接口. List List ...
- PHP使用数据库的并发问题
在并行系统中并发问题永远不可忽视.尽管PHP语言原生没有提供多线程机制,那并不意味着所有的操作都是线程安全的.尤其是在操作诸如订单.支付等业务系统中,更需要注意操作数据库的并发问题. 接下来我通过一个 ...
- iOS手势UIGestureRecognizer的使用及手势冲突的解决办法【转】
转自:iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 关于手势的一篇很好的帖子,转载过来免得丢失.你可能最感兴趣的是手势间的互斥处理,那么就搜索 4.手势间的互斥处 ...