对象克隆及属性转换-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一个对象不行吗? 答案是:克隆的对象可能包 ...
随机推荐
- Graph Database & 图形数据库
Graph Database 图形数据库 https://en.wikipedia.org/wiki/Graph_database cayley https://github.com/cayleygr ...
- Java关于Robot类的使用
利用Robot类实现自动操作,实现效果是运行之后鼠标自动定位到整个屏幕坐标系的(635,454)位置,输入wangtianze package com.wtz.util; import java.aw ...
- linux命令行打包、压缩及解压缩
使用命令: tar 打包: tar -zcvf 目标文件 源文件或文件夹 目标文件为要打包成的文件的文件名, 打包后文件的 格式取决于目标文件的后缀名 单文件或文件夹打包 tar -zcvf ind ...
- BZOJ2326 HNOI2011数学作业(矩阵快速幂)
考虑暴力,那么有f(n)=(f(n-1)*10digit+n)%m.注意到每次转移是类似的,考虑矩阵快速幂.首先对于位数不同的数字分开处理,显然这只有log种.然后就得到了f(n)=a·f(n-1)+ ...
- 【Revit API】脱离中心文件
话不多说,直接代码,整个过程不需要发起Transaction OpenOptions op = new OpenOptions(); op.Audit = true; //是否需要核查 op.Deta ...
- Problem C Dist 解题报告
Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...
- Qtree4——动态点分治
题目描述 给出一棵边带权的节点数量为n的树,初始树上所有节点都是白色.有两种操作: C x,改变节点x的颜色,即白变黑,黑变白 A,询问树中最远的两个白色节点的距离,这两个白色节点可以重合(此时距离为 ...
- 界面编程之QT的事件20180727
/*******************************************************************************************/ 一.事件 1 ...
- Linux makefile讲解
博客不会讲解的太细致深入,推荐先看视频再看博客 视频链接,推荐去B站观看,B站比较清晰... 土豆网:http://www.tudou.com/programs/view/19VZ0f3b_I0 B站 ...
- Signal ()函数详细介绍
1. 功能 设置某一信号的对应动作 2. 声明 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t si ...