I have an array of 10000 objects. Each object is like this:
{"id":5, "name": "Jordin Sparks}
What is the most efficient and fastest way for me to rename keys such that every object in the array becomes:
{"num":5, "fullname": "Jordin Sparks"}
In other words, "id" property is renamed to "num" and the "name" property for each object is renamed to "fullname".
I have no idea if this is indeed the most efficient, but here is my attempt.
for(var i = arr.length; i--; ){
var obj = arr[i];
obj.num = obj.id;
obj.fullname = obj.name;
delete obj.id;
delete obj.name;
}
Personally, I would do it like this.
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];
}
}
}
}
You would call it like so, where myArray is your array of objects.
renameKeys(myArray, [
{from: "id", to: "num" },
{ from: "name", to: "fullname" }
]);
Has the advantage that it is reusable for any number of name re-mappings. Doesn't modify native prototypes. And only iterates once around the array, no matter how many re-mappings take place.
Brute force approach. Convert to string, rename fields and parse to 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);
Edit: modify replace to global.
From 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;
};
You would run objectOf1000.renameProperty('id', 'num')
and objectOf1000.renameProperty('name', 'full name')
arr.map(function (item) { return { num: item.id, fullname: item.name } });
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.