Home > database >  How to update the existing list value for specific key in NodeJS
How to update the existing list value for specific key in NodeJS

Time:11-18

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

  • Related