Я пишу функцию, которая принимает в качестве аргумента либо объект, либо массив, и я хочу создать новую пустую копию и заполнить ее преобразованными данными из исходного объекта.
Мне интересно, есть ли способ сделать этот новый объект/массив просто, без необходимости проверять, что это за тип, и действовать соответствующим образом.
«Долгий» путь в настоящее время:
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
и др.
Есть ли сокращенный способ сделать это, или мне не повезло?
Вы можете использовать constructor
свойство thing
. И не используйте new
в качестве имени переменной.
const transf = (thing) => {
const newelm = new thing.constructor()
}
Демо:
const transf = (thing) => {
return new thing.constructor()
}
console.info(transf(['arra']))
console.info(transf({key:'value'}))
@raina77ow Да, хотя если учитывать только Object
и Array
, то не имеет значения
Спасибо - да - не знаю, почему я использовал new
там!
@match Подумайте о том, чтобы принять ответ, если он вас устраивает.
используйте метод
constructor
.