I've wanted to update the specific key's value dynamically in NodeJS. Initially, this key USER_SAL
has the value of 0
, I would like to update this key USER_SAL
value dynamically from USER_SAL -> 0
To USER_SAL -> 50000.
Please find my code below:
const obj = {
users: [{
name: "USER_ID",
value: "ASD32343D",
},
{
name: "USER_NAME",
value: "mark",
},
{
name: "USER_ALT_ID",
value: "DSDF3234",
},
{
name: "USER_LOC",
value: "NY",
},
{
name: "USER_SAL",
value: "0",
},
],
};
const changes = {
USER_ALT_ID: "myuser.altID", // changing to different key name
USER_LOC: "myuser.loc", // changing to different key name
};
obj.users.forEach((o) => {
if (changes[o.name]) o.name = changes[o.name];
});
console.log(obj.users);
Expected output:
[
{ name: 'USER_ID', value: 'ASD32343D' },
{ name: 'USER_NAME', value: 'mark' },
{ name: 'myuser.altID', value: 'DSDF3234' },
{ name: 'myuser.loc', value: 'NY' },
{ name: 'USER_SAL', value: '50000' }
]
I'm not very good at NodesJS, can someone please help how can we update the specific key's value. Appreciate your help in advance. Thanks!
CodePudding user response:
Use map instead of forEach, map allows you to create a new array based on changes to an old one. See below:
const obj = {
users: [{
name: "USER_ID",
value: "ASD32343D",
},
{
name: "USER_NAME",
value: "mark",
},
{
name: "USER_ALT_ID",
value: "DSDF3234",
},
{
name: "USER_LOC",
value: "NY",
},
{
name: "USER_SAL",
value: "0",
},
],
};
const changes = {
USER_ALT_ID: "myuser.altID", // changing to different key name
USER_LOC: "myuser.loc", // changing to different key name
};
const newUsers = obj.users.map((o) => {
if (changes[o.name]) o.name = changes[o.name];
if(o.name === "USER_SAL") o.value = "50000";
return o;
});
obj.users = newUsers;
console.log(obj.users);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
const obj = {
users: [{
name: "USER_ID",
value: "ASD32343D",
},
{
name: "USER_NAME",
value: "mark",
},
{
name: "USER_ALT_ID",
value: "DSDF3234",
},
{
name: "USER_LOC",
value: "NY",
},
{
name: "USER_SAL",
value: "0",
},
],
};
const keyChanges = {
USER_ALT_ID: "myuser.altID", // changing to different key name
USER_LOC: "myuser.loc", // changing to different key name
};
const valueChanges = {
USER_SAL: 5000,
};
obj.users = obj.users.map(x=>({
name: keyChanges[x.name] || x.name,
value: valueChanges[x.name] || x.value,
}));
console.log(obj.users);
CodePudding user response:
I created a function that would change that value to whatever you wanted:
const dynSal = (arr, dynVal) => {
for (let i = 0; i < arr.length; i ) {
if (arr[i].name === "USER_SAL") {
arr[i].value = dynVal;
}
}
}
dynSal(obj.users, 5000);
You provide the function with the array of objects. It loops through those objects and changes the value if it happens up an object for which the name is "USER_SAL" JP