通过键字符串从对象数组中删除属性
Posted
技术标签:
【中文标题】通过键字符串从对象数组中删除属性【英文标题】:Removing attribute from an Object Array by key string 【发布时间】:2019-11-17 04:39:53 【问题描述】:我有一个对象数组,我想删除这个对象的一些属性,方法是调用一个函数并传递数组和我要删除的键。
我在 Stack Overflow 上引用了 this 答案,当我手动指定密钥时它可以工作,例如 id
。它会删除数组中每个对象的id
属性。
const newArray = array.map(
(
id,
...otherAttributes
) => otherAttributes
);
但是当我将密钥传递给函数,然后使用参数中的密钥时,它无法检测到对象中的密钥,因此无法删除它。函数体是这样的:
removeKeyFromObjectsArray(newArray, key)
const newArray = products.map(
(
key,
...otherAttributes
) => otherAttributes
);
return newArray;
我使用this.removeKeyFromObjectsArray(this.updatedProducts, 'id')
调用这个函数,但是这个数组中的对象仍然有密钥。 (this
是因为它在 Vue 应用程序中,我需要在同一个实例中引用不同的函数)。
如果我们手动指定键名,如id
,则此功能有效,但是当我们通过参数传递密钥字符串然后使用它时它不起作用,有人可以解释这里的问题是什么以及我该如何解决它?
【问题讨论】:
【参考方案1】:要使用computed property names in destrcuturing,您需要用[]
包装key
,并将其分配给一个新变量(在本例中为_
)。否则,它将从对象中解构一个名为 "key"
的属性,而不是 key
变量中具有 值 的属性
function removeKeyFromObjectsArray(products, key)
const newArray = products.map(
(
[key]: _,
...otherAttributes
) => otherAttributes
);
return newArray;
console.log(
removeKeyFromObjectsArray([ id: 1, name: 'name1',
id: 2, name: 'name2'], 'name')
)
【讨论】:
@VasilyLiaskovsky 怎么样? 现在好多了:)【参考方案2】:这是删除文字 key
- 使用带有方括号 []
的动态属性表示法来获得您想要的结果:
const newArray = products.map(( [key]: _, ...otherAttributes ) => otherAttributes);
我将不需要的键分配给上面的_
的原因是因为习惯上将_
用作“不需要”或“忽略此”键。请注意,这与使用 _
(_key
)前缀键不同,这意味着“不要直接修改它 - 使用 getter 或 setter”。
【讨论】:
以上是关于通过键字符串从对象数组中删除属性的主要内容,如果未能解决你的问题,请参考以下文章