JSでObjectを普通にコピーするとshallow copyになってしまう(ネストされたObjectなどがコピーされない)
そのハックとしてよく以下のようなコードが出てくる
const deepCopy1 = JSON.parse(JSON.stringify(obj));
しかし、これだとFileオブジェクトはコピーされない。
また、Utility系の外部ライブラリとして有名なLodashのdeepCopyでもFileオブジェクトはコピーできなかった
Fileオブジェクトも含めてコピーする関数
const deepCopy = (obj) => {
if (obj === null) return null
if (typeof obj !== 'object') return obj
if (obj instanceof File) return new File([obj], obj.name, { type: obj.type })
if (Array.isArray(obj)) {
return obj.map((val) => deepCopy(val))
}
const copy = {}
Object.keys(obj).forEach((key) => {
copy[key] = deepCopy(obj[key])
})
return copy
}
これで行けた。
Blobとかもやりたかったら、Fileと同じノリで増やしてあげるといけると思います。