基于一个已有的对象/数组创建一个空的对象/数组

3
我正在编写一个函数,它以对象或数组作为参数,并且我想创建一个新的、空的副本,并从原始对象中填充转换后的数据。
我想知道是否有一种简单的方法来创建这个新的对象/数组,而不必测试其类型并采取相应的行动。目前的“长”方式是:
const transf = (thing) => {
  if (typeof(thing) === 'array') {
    const new = []
  }  else {
    const new = {}
  }
}

我希望有一种很好的“内置”方式,可以像这样做:

const transf = (thing) => {
  const new = thing.emptyCopy()
}

我看过了Object.create,但它总是创建一个object(即使prototype是一个array),而typeof返回一个字符串,不能与例如new等一起使用。

有没有一种简便的方法来做到这一点,或者我没有运气了?


2
使用 constructor 方法。 - Saurabh Agrawal
1个回答

8
您可以使用 thingconstructor 属性。不要将变量名命名为 new
const transf = (thing) => {
  const newelm = new thing.constructor()
}

演示:

const transf = (thing) => {
  return new thing.constructor()
}

console.log(transf(['arra']))
console.log(transf({key:'value'}))


@raina77ow 没错,尽管如果只考虑 ObjectArray 就没关系。 - Bergi
谢谢 - 是的 - 不确定为什么我在那里使用了 new - match
@match 如果你对答案满意,请考虑接受它。 - Maheer Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接