I have 1 object coming from the server with multiple properties in which I want to hydrate it into a new object, changing the name of 1 property and keeping the rest.
Code:
JSON: { UserId: 1, Name: "Woo", Age: 10 }
The format of the object I want it in:
var newObj = {}
newObj.id = jsonObj.UserId;
//Everything property below here is the same. How can i prevent writing this code?
newObj.Name = jsonObj.Name;
newObj.Age = jsonObj.Age;
What I'm doing is based on this answer, trying to parse some json into a format that requires me to change the name of 1 property.
Object.assign() The Object.assign() method copies all enumerable own properties from one or more source objects to a target object. It returns the modified target object.
assign is the standard way to copy properties from one object to another. It is often used for copying properties that are one-layer deep. (One-layer deep means there are no nested objects).
The Object. assign() function can be used to copy all enumerable own properties from one or more source objects to a target object. This function returns the target object to the newObject variable.
Similar to adding elements to arrays without mutating them, You can use the spread operator to copy the existing object into a new one, with an additional value. If a value already exists at the specified key, it will be overwritten.
For such a simple case, you could do something like:
var newObj = {id: jsonObj.UserId, Name: jsonObj.Name, Age: jsonObj.Age};
For a more complex object with a large number of fields, you might prefer something like:
//helper function to clone a given object instance
function copyObject(obj) {
var newObj = {};
for (var key in obj) {
//copy all the fields
newObj[key] = obj[key];
}
return newObj;
}
//now manually make any desired modifications
var newObj = copyObject(jsonObj);
newObj.id = newObj.UserId;
var newObj = Object.assign({}, jsonObj);
reference (MDN)
var newObj = JSON.parse(JSON.stringify(jsonObj));
If you want to copy only specific fields
/**
* Returns a new object with only specified fields copied.
*
* @param {Object} original object to copy fields from
* @param {Array} list of fields names to copy in the new object
* @return {Object} a new object with only specified fields copied
*/
var copyObjectFields = function (originObject, fieldNamesArray)
{
var obj = {};
if (fieldNamesArray === null)
return obj;
for (var i = 0; i < fieldNamesArray.length; i++) {
obj[fieldNamesArray[i]] = originObject[fieldNamesArray[i]];
}
return obj;
};
//example of method call
var newObj = copyObjectFields (originalObject, ['field1','field2']);
I mostly prefer to reuse instead of recreate so I'd suggest http://underscorejs.org/#clone
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With