使用Dexie存数组到IndexedDB遇DataCloneError,求移除[[Prototype]]方法
解决Dexie保存数组到IndexedDB的DataCloneError问题
下面是几个可行的移除自定义原型、得到标准数组的方法:
JSON序列化/反序列化
这是最快捷的方式,通过JSON转换会自动丢弃自定义原型,生成标准Array原型的新数组:// 替换yourArray为你要处理的数组 const cleanedArray = JSON.parse(JSON.stringify(yourArray));注意:如果数组里有
undefined,JSON序列化会把它转成null,如果需要保留undefined,可以用下面的方法。手动复制到新数组
用展开运算符或者forEach遍历,把元素复制到原生空数组里,新数组的原型就是标准Array:// 展开运算符写法 const cleanedArray = [...yourArray]; // forEach写法 const cleanedArray = []; yourArray.forEach(item => cleanedArray.push(item));使用Array.from()转换
Array.from可以将带自定义原型的数组转为标准数组,同时保留原元素:const cleanedArray = Array.from(yourArray);
原理:IndexedDB的结构化克隆算法不支持带有自定义原型的对象/数组,把数组重置为标准Array原型后,就能被Dexie正常保存了。
内容的提问来源于stack exchange,提问作者Cynthia
相关产品推荐
相关产品推荐

