如何解决在Javascript中传播时替换对象中的键
我有以下对象,
const obj = {
'a': 1,'b': 2,'c': 3,'d': 4,.
.
.
.
'z': 26
}
我想要一个新对象,它将包含所有键作为对象 obj
,但不是一个特定的键,我希望它被另一个键替换,比如我想省略键 {{1 }} 并将其替换为 'a'
。下面的方式不会删除原始键 'new_a'
。有没有办法通过别名来实现它?或者删除键 'a'
是唯一的选择?
'a'
我希望obj2变成这样-
const obj2 = {
...obj,'new_a': 111
}
解决方法
我想不出一个方法来一步完成(当然,单行,但不是一个步骤)。用休息和赋值进行解构虽然很好:
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,'z': 26
}
let obj2 = {
'new_a': 111,...Object.fromEntries(Object.entries(obj).filter(([key]) => key !== 'a'))
};
console.log(obj2);
这样您就不必delete
任何键,也不必“复制”原始 a
到新对象。
您可以使用 iife 和对象 rest 扩展运算符来收集除重命名的属性之外的所有属性,然后扩展以将它们添加到新对象中。 mdn docs 供参考。
const obj2 = (({a: newA,...rest}) => ({newA,...rest}))(obj)
出于可读性的考虑,您可能需要考虑编写适配器函数,它相当并且很好地描述了对象属性的转换。
const obj = {a: 1,b: 2,c:3,d: 4};
const adapter = ({a: newA,...rest});
const obj2 = {
...adapter(obj),}
console.log(obj2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。