从对象中删除任意 属性,当所述 属性 被抽象为字符串时

removing an arbitarry property from an object, when said property is abstracted as a string

假设我有一个对象 myObject,其属性为 a,b,c.

如果我想去掉属性a,我可以正常使用:

{a, ...rest} = myObject;

然后使用 rest,这样我就可以避免对象突变。

但是,我正在处理这样一种情况,我想删除的 属性 的名称被抽象为字符串参数。我仍然可以使用方括号语法访问所述对象的 属性,所以 if:

const stringWithThePropertyName = 'whatever';

那么 属性 将是:

myObject[stringWithThePropertyName]

这相当于 myObject.whatever .但是,如果我想从数组中删除 属性 怎么办?

也就是说,给定一个对象,删除一个任意的 属性 ,我将其名称作为字符串参数,最好是采用不可变的方式,就像我使用通常的传播 + 解构语法一样。

如果您定义一个变量名来将找到的值放入:

,您可以在解构时使用方括号语法

const myObject = {
  foo: 'foo',
  bar: 'bar',
  baz: 'baz'
};

const stringWithThePropertyName = 'foo';
const { [stringWithThePropertyName]:_ , ...rest } = myObject;
console.log(rest);

_ 变量将包含 foo 处的值,因此如果您只想要不带 foo 的对象,则不要使用 _ 变量)

请注意,此 实际上并没有从对象 中删除 属性 - 它只是 创建一个新对象 属性(这很好——避免不必要的突变通常是个好主意)。如果您真的想从原始对象中删除 属性,请使用 delete:

delete myObject[stringWithThePropertyName];