从对象中删除任意 属性,当所述 属性 被抽象为字符串时
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];
假设我有一个对象 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];