Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replace a key in an object while spreading

I have the below object,

const obj = {
  'a': 1,
  'b': 2,
  'c': 3,
  'd': 4,
  .
  .
  .
  .
  'z': 26
}

I want to have a new object which will contain all the keys as object obj, but instead of one specific key, I want it to be replaced with another key, say I want to omit key 'a' and replace it with 'new_a'. Below way doesn't remove the original key 'a'. Is there a way in which I can achieve it with aliasing? Or deleting key 'a' is the only option?

const obj2 = {
   ...obj,
   'new_a': 111
}

I want obj2 to be like this-

{
   'new_a': 111,
   'b': 2,
   'c': 3,
   .
   .
   .
   .
   'z': 26 
}
like image 396
Frosted Cupcake Avatar asked Dec 12 '25 03:12

Frosted Cupcake


1 Answers

I can't think of a way to do it in a single step (single line, sure, but not a single step). Destructuring with rest followed by assignment does it nicely though:

const {a, ...obj2} = obj;
obj2.new_a = obj.a; // Or just `= a;`, either way

Live Example:

const obj = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
    // ...
    'z': 26
};
const {a, ...obj2} = obj;
obj2.new_a = obj.a;
console.log(obj2);
like image 183
T.J. Crowder Avatar answered Dec 14 '25 15:12

T.J. Crowder