2015-11-09 53 views
5

我有一個10000個對象的數組。每個對象是這樣的:如何在JavaScript中的項目數組中最有效地重命名鍵?

{"id":5, "name": "Jordin Sparks} 

什麼是我的重命名鍵使得陣列中的每個對象將成爲最有效,最快捷的方式:

{"num":5, "fullname": "Jordin Sparks"} 

換句話說,「ID」屬性重命名爲「num」,每個對象的「name」屬性重命名爲「fullname」。

+0

的可能的複製[JavaScript的:對象重命名鍵】(http://stackoverflow.com/questions/4647817/javascript-object-rename-key) –

+0

爲什麼你不能使用在首位這些名字? –

+0

你在找什麼兼容性?可以使用任何功能來實現這種效率嗎?有問題的物體是否保證只有這些鍵?空間效率或時間效率?......效率最好在上下文中理解。 – allonhadaya

回答

0

https://stackoverflow.com/a/4648411/5403473

Object.prototype.renameProperty = function (oldName, newName) { 
    // Do nothing if the names are the same 
    if (oldName == newName) { 
     return this; 
    } 

    // Check for the old property name to avoid a ReferenceError in strict mode. 
    if (this.hasOwnProperty(oldName)) { 
     this[newName] = this[oldName]; 
     delete this[oldName]; 
    } 

    return this; 
}; 

您將運行objectOf1000.renameProperty('id', 'num')objectOf1000.renameProperty('name', 'full name')

1

我不知道,如果這確實是最有效的,但這裏是我的嘗試。

1

就我個人而言,我會這樣做。

function renameKeys(arr, nameMap) { 
    // loop around our array of objects 
    for(var i = 0; i < arr.length; i++) { 
    var obj = arr[i]; 
    // loop around our name mappings 
    for(var j = 0; j < nameMap.length; j++) { 
     var thisMap = nameMap[j]; 
     if(obj.hasOwnProperty(thisMap.from)) { 
     // found matching name 
     obj[thisMap.to] = obj[thisMap.from]; 
     delete obj[thisMap.from]; 
     } 
    } 
    } 
} 

你會這樣稱呼它,其中myArray是你的對象數組。

renameKeys(myArray, [ 
    {from: "id", to: "num" }, 
    { from: "name", to: "fullname" } 
]); 

具有可重用於任意數量的名稱重映射的優點。不修改原生原型。只有在數組中迭代一次,無論發生多少次重映射。

1

蠻力的方法。轉換爲字符串,重命名字段並解析爲JSON

var src = {"id":5, "name": "Jordin Sparks"}; 

var str = JSON.stringify(src); 

var rst = JSON.parse(str.replace(/"id"/g, '"num"').replace(/"name"/g, '"fullname"')); 
console.debug(rst); 

編輯:modify replace to global。

+0

這看起來可能是最快的,但你需要運行計時以確保耐人尋味的方法不會更快 – jamylak

0
arr.map(function (item) { return { num: item.id, fullname: item.name } });