通过键字符串从对象数组中删除属性

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”。

【讨论】:

以上是关于通过键字符串从对象数组中删除属性的主要内容,如果未能解决你的问题,请参考以下文章

按属性将对象数组与另一个对象的键进行比较

从数组中删除重复的对象

如何从 React Js 中的数组属性中删除单个对象?

从过滤数组和主数组中删除相同的对象

当对象键javascript中的数组字符串匹配时删除对象

如何从对象数组中删除对象。在淘汰赛JS。错误:对象不支持属性或方法“删除”