Home > Blockchain >  Mutate nested deep object
Mutate nested deep object

Time:04-29

I have this object

const a = {
  elementErrors: {
    errorMessages: [],
    errors: {
      project: "Issues with this Issue Type must be created in the same project as the parent."
    }
  },
  issueKey: "JP-55",
  status: 400
}

and I want to mutate it so that the nested project property includes the issueKey property at the end of the string, something like "Issues with this Issue Type must be created in the same project as the parent (JP-55)."

I know I should show that I tried and I did but I haven't managed to come with the beginning of a solution.

The final object would look like this:

const a = {
      elementErrors: {
        errorMessages: [],
        errors: {
          project: "Issues with this Issue Type must be created in the same project as the parent (JP-55)."
        }
      },
      issueKey: "JP-55",
      status: 400
    }

Many thanks

CodePudding user response:

You can use the = operator to 'add' something to the end of the string.

a.elementErrors.errors.project  = ` (${a.issueKey})`;

let a = {
  elementErrors: {
    errorMessages: [],
    errors: {
      project: "Issues with this Issue Type must be created in the same project as the parent."
    }
  },
  issueKey: "JP-55",
  status: 400
}

a.elementErrors.errors.project  = ` (${a.issueKey})`;

console.log(a);

CodePudding user response:

You want to compute a new property based on some other values. Just try to access and override it.

If you always have a dot at the end, you can use a mix of split() and template literals.

const a = {
  elementErrors: {
    errorMessages: [],
    errors: {
      project: "Issues with this Issue Type must be created in the same project as the parent."
    }
  },
  issueKey: "JP-55",
  status: 400
}

a.elementErrors.errors.project = `${a.elementErrors.errors.project.split('.')[0]} (${a.issueKey}).`;

console.log(a);

PS: Above code will break if there is no .

  • Related