Object's Keys Rename

HTML

<textarea id="log" rows="20" cols="30"></textarea>

JavaScript

//================================================
// Demo
//================================================
var log = "";

// objA Copy & Rename
var objA = {A1:100, "A2":200, A3:300};
var objB = ObjKeyRename(objA, {"A1":"B1", "A3":"B3"});
log += "--- objA Copy & Rename ---\n";
log += "[objA]\n";
for(var key in objA) log += key + "=" + objA[key] + "\n";
log += "[objB]\n";
for(var key in objB) log += key + "=" + objB[key] + "\n";

// objA Rename Directly
log += "\n--- objA Rename Directly ---\n";
log += "[objA before]\n";
for(var key in objA) log += key + "=" + objA[key] + "\n";
ObjKeyRename2(objA, {"A2":"XXX"});
log += "[objA after]\n";
for(var key in objA) log += key + "=" + objA[key] + "\n";
document.getElementById("log").value += log;

//================================================
// Rename Objet's Keys [Copy]
//   src : object - source obj
//   map : object - rename map 
//           {"old1":"new1", "old2":"new2", ...}
//================================================
function ObjKeyRename(src, map) {
    var dst = {};
    // src --> dst (copy)
    for(var key in src){
        if(key in map)
            // rename key
            dst[map[key]] = src[key];
        else
            // same key
            dst[key] = src[key];
    }
    return dst;
}

//================================================
// Rename Objet's Keys [Direct]
//   src : object - source obj
//   map : object - rename map 
//           {"old1":"new1", "old2":"new2", ...}
//================================================
function ObjKeyRename2(src, map) {
    var dst = {};
    // src --> dst
    for(var key in src){
        if(key in map)
            // rename key
            dst[map[key]] = src[key];
        else
            // same key
            dst[key] = src[key];
    }
    // clear src
    for(var key in src){
        delete src[key];
    }
    // dst --> src
    for(var key in dst){
        src[key] = dst[key];
    }
}