我有一個10000個對象的數組。每個對象是這樣的:如何在JavaScript中的項目數組中最有效地重命名鍵?
{"id":5, "name": "Jordin Sparks}
什麼是我的重命名鍵使得陣列中的每個對象將成爲最有效,最快捷的方式:
{"num":5, "fullname": "Jordin Sparks"}
換句話說,「ID」屬性重命名爲「num」,每個對象的「name」屬性重命名爲「fullname」。
我有一個10000個對象的數組。每個對象是這樣的:如何在JavaScript中的項目數組中最有效地重命名鍵?
{"id":5, "name": "Jordin Sparks}
什麼是我的重命名鍵使得陣列中的每個對象將成爲最有效,最快捷的方式:
{"num":5, "fullname": "Jordin Sparks"}
換句話說,「ID」屬性重命名爲「num」,每個對象的「name」屬性重命名爲「fullname」。
從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')
我不知道,如果這確實是最有效的,但這裏是我的嘗試。
就我個人而言,我會這樣做。
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" }
]);
具有可重用於任意數量的名稱重映射的優點。不修改原生原型。只有在數組中迭代一次,無論發生多少次重映射。
蠻力的方法。轉換爲字符串,重命名字段並解析爲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。
這看起來可能是最快的,但你需要運行計時以確保耐人尋味的方法不會更快 – jamylak
arr.map(function (item) { return { num: item.id, fullname: item.name } });
的可能的複製[JavaScript的:對象重命名鍵】(http://stackoverflow.com/questions/4647817/javascript-object-rename-key) –
爲什麼你不能使用在首位這些名字? –
你在找什麼兼容性?可以使用任何功能來實現這種效率嗎?有問題的物體是否保證只有這些鍵?空間效率或時間效率?......效率最好在上下文中理解。 – allonhadaya