我已经创建了一个重命名属性名称的好函数:
https://github.com/meni181818/simpleCloneJS/blob/master/renameProperties.js
用法:
var renamedObj = renameProperties(sourceObject, {propName: 'propNEWname', anotherPropName: 'anotherPropNEWname'});
我的函数也可以处理数组内的对象,因此在您的情况下,您可以这样做:
addObjectResponse = renameProperties(addObjectResponse, {SPO2: 'O2'});
{{链接1:DEMO}}
function renameProperties(sourceObj, replaceList, destObj) {
destObj = destObj || {};
each(sourceObj, function(key) {
if(sourceObj.hasOwnProperty(key)) {
if(sourceObj[key] instanceof Array) {
if(replaceList[key]) {
var newName = replaceList[key];
destObj[newName] = [];
renameProperties(sourceObj[key], replaceList, destObj[newName]);
} else if(!replaceList[key]) {
destObj[key] = [];
renameProperties(sourceObj[key], replaceList, destObj[key]);
}
} else if(typeof sourceObj[key] === 'object') {
if(replaceList[key]) {
var newName = replaceList[key];
destObj[newName] = {};
renameProperties(sourceObj[key], replaceList, destObj[newName]);
} else if(!replaceList[key]) {
destObj[key] = {};
renameProperties(sourceObj[key], replaceList, destObj[key]);
}
} else {
if(replaceList[key]) {
var newName = replaceList[key];
destObj[newName] = sourceObj[key];
} else if(!replaceList[key]) {
destObj[key] = sourceObj[key];
}
}
}
});
return destObj;
}
在上面的函数的第三行,我们使用了
each()
函数。它是这样的:
function each(objOrArr, callBack) {
if(objOrArr instanceof Array) {
for(var i = 0; i < objOrArr.length; i++) {
callBack(i);
}
} else if(typeof objOrArr === 'object') {
for(var prop in objOrArr) {
if(objOrArr.hasOwnProperty(prop)) {
callBack(prop);
}
}
}
}
注意: 如果你正在使用Jquery或Underscore.js或其他具有'each()'函数的库,你可以使用它来代替。只需将其替换为$.each
(jquery)或_.each
(underscore.js)即可。