0

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!

3 Answers 3

1

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);

Sign up to request clarification or add additional context in comments.

3 Comments

I want to change this key value from USER_SAL -> 0 To USER_SAL -> 50000.
See code change inside of the .map callback
I'd shorted it to this obj.users.map(x=>({ value: x.value, name: changes[x.name] || x.name }))
0
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);

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.