Search code examples
javascriptarraysalgorithmjavascript-objects

Overwrite an Object inside an Array of Objects


What is the best way to overwrite an object inside an array of objects?

I would like to have only one object per username, in this case in the initial arr Francis has a showMessage to true but userDetails has the same username but different value for the showMessage so I would like to overwrite this last object in the array.

Expected output:

[
  { showMessage: true, username: 'Joe' },
  { showMessage: true, username: 'Douglas' },
  { showMessage: false, username: 'Francis' }
]

Current code:

let obj = {};
let arr = [
{showMessage: true, username: "Joe"}, 
{showMessage: true, username: "Douglas"}, 
{showMessage: true, username: "Francis"}  
]

const userDetails = {
  showMessage: false,
  username: 'Francis',
}
objJSON = userDetails

var newData = [...arr, userDetails] 
console.log("newData: ",newData);


Solution

  • Use Object.assign after finding in array the object which matches the username — in order to overwrite/modify the object data with another Object of data

    const arr = [
      {showMessage: true, username: "Joe"}, 
      {showMessage: true, username: "Douglas"}, 
      {showMessage: true, username: "Francis"}  
    ]
    
    const userDetails = {
      showMessage: false,
      username: 'Francis',
    };
    
    // Update user data by username (if object is found in array):
    const oldDetails = arr.find(user => user.username === userDetails.username);
    oldDetails && Object.assign(oldDetails, userDetails);
    
    console.log(arr);