NodeJS 使用spread运算符或类似运算符复制属性,但不复制函数属性

jv2fixgn  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(154)

在JS中有没有一种方法可以使用spread操作符或类似的方法来复制所有非函数属性?这显然不会做到(因为它会复制函数引用):

getSerializableData(): Partial<this> {
    return {
      ...this,
      subscribers: undefined,
      subscribersByEvent: undefined,
      
    }
  }

在伪代码中,它将是:

getSerializableData(): Partial<this> {
    return {
      ...Object.serializableFields(this),   // <<< here
      subscribers: undefined,
      subscribersByEvent: undefined,
    }
  }

因此扩展算子只作用于非函数属性等。这可能吗?

j5fpnvbx

j5fpnvbx1#

您可以按值类型筛选条目,然后使用reduce函数将对象压缩回去。

const filteredObject = Object.entries(this)
  .filter(it => typeof(it[1] !== 'function'))
  .reduce( (acc,item) => { acc[item[0]]=item[1]; return acc }, {} )

正如Bergi所建议的,可以使用Object.fromEntries压缩对象。

const entries = Object.entries(this)
  .filter(it => typeof(it[1] !== 'function'))

const filteredObject = Object.fromEntries(entries)

相关问题