对象克隆及属性转换-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一个对象不行吗? 答案是:克隆的对象可能包 ...
随机推荐
- IdeaVim-常用操作(转载)
IdeaVim简介 IdeaVim是IntelliJ IDEA的一款插件,他提高了我们写代码的速度,对代码的跳转,查找也很友好. 安装位置 安装之后它在 Tools > Vim Emulator ...
- selectTree & bug
selectTree & bug 相对路径 & 绝对路径 http://192.168.58.189:8080/hui/#/components/selectTree https:// ...
- CF10D LCIS
题意翻译 求两个串的最长公共上升子序列. 题目描述 This problem differs from one which was on the online contest. The sequenc ...
- Trips CodeForces - 1037E(思维dfs)
题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...
- MT【183】借力打力
(2011安徽省赛)设$f(x)=ax^3+bx+c(a,b,c\in R)$,当$0\le x \le1$时,$0\le f(x)\le1$,求$b$的可能的最大值. 分析:$f(0)=c,f(1) ...
- BZOJ 4173: 数学
4173: 数学 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 462 Solved: 227[Submit][Status][Discuss] D ...
- CRM 报表导出excel时指定sheet名
如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:
- Python OS模块中的fork方法实现多进程
import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name ...
- CodeSmith自己动手写模板
CodeSmith学习笔记------ 1.新建一个Code Smith Generator Template(C sharp) 2.一些常见标签的解释: ①外部变量: <%@ Property ...
- Windows完成端口与Linux epoll技术简介
收藏自:http://www.cnblogs.com/cr0-3/archive/2011/09/09/2172280.html WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点 ...