繁体   English   中英

在 Javascript 中传播时替换 object 中的密钥

[英]Replace a key in an object while spreading in Javascript

我有以下 object,

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

我想要一个新的 object 它将包含所有的键 object obj ,但不是一个特定的键,我希望它被另一个键替换,比如我想省略键'a'并将其替换为'new_a' . 以下方式不会删除原始密钥'a' 有没有办法可以通过别名来实现它? 还是删除键'a'是唯一的选择?

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

我希望 obj2 是这样的-

{
   'new_a': 111,
   'b': 2,
   'c': 3,
   .
   .
   .
   .
   'z': 26 
}

我想不出一步就能做到的方法(单行,当然,但不是一步)。 使用 rest 进行解构,然后进行赋值,虽然效果很好:

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

现场示例:

 const obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, //... 'z': 26 }; const {a, ...obj2} = obj; obj2.new_a = obj.a; console.log(obj2);

如果您不希望new_a具有与a相同的值,则:

const obj2 = { ...obj, new_a: 111 };
delete obj2["a"];

也许不是最干净的方法,而是单线:

 const obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'z': 26 } let obj2 = { 'new_a': 111, ...Object.fromEntries(Object.entries(obj).filter(([key]) => key;== 'a')) }. console;log(obj2);

这样您就不必delete任何密钥,也不必将原始a “复制”到新的 object。

您可以使用 iife 和 object rest 扩展运算符来收集除重命名的属性之外的所有属性并将它们添加到新的 object 中。 mdn 文档供参考。

const obj2 = (({a: newA, ...rest}) => ({newA, ...rest}))(obj)


为了便于阅读,您可能需要考虑编写适配器函数,它非常好,并且很好地描述了对象属性的转换。

 const obj = {a: 1, b: 2, c:3, d: 4}; const adapter = ({a: newA, ...rest}) => ({newA, ...rest}); const obj2 = {...adapter(obj), } console.log(obj2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM