我有一个deepClone
函数,我使用整个程序克隆一个对象的所有属性和值,并返回克隆的对象(看代码)。我现在想要在对象中包含一个audioBuffer
并成功将其复制到返回对象。有没有办法修改函数来包含这个功能?网络音频API - 克隆音频缓冲区
注意:并非所有传递给deepClone
函数的对象都会包含audioBuffer
,因此它应该能够应对并成功克隆具有和不具有它们的对象。
编辑:有人能想出一种方法将JSON.parse(JSON.stringify(object))
与作为答案之一提供的解决方案相结合吗?即检查对象的属性,因为克隆正在发生,if (property == 'trackBuffer')
克隆与其余的不同?
deepClone
功能:
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
/**
* Utility function for deep object cloning
*
* @param {object} obj Object to be cloned
* @returns {object} The deep-cloned object
*/
function deepClone (object) {
return JSON.parse(JSON.stringify(object));
};
// Create audio context
var context = new AudioContext();
// Create empty audio buffer
var audioBuffer = context.createBuffer(2, 22050, 44100);
// Create object to be cloned
var track = {
prop1: "val1",
prop2: "val2",
trackBuffer: audioBuffer
};
// Log before clone
console.log("before clone, track: \n", track);
// Clone track
var clonedTrack = deepClone(track);
// Log after clone
console.log("after clone, clonedTrack: \n", clonedTrack);
正如可以从代码段,请参阅clonedTrack
的trackBuffer
被转换为一个空对象将被从预期JSON.parse(JSON.stringify(object));
。
修改deepClone
以成功克隆audioBuffer
但保留现有功能的最佳方法是什么?
任何帮助将不胜感激,谢谢!
这恐怕是引发错误'类型错误:当调用它'Arrangement.findByIdAndUpdate(doc._id,undefined'不能设置属性 '$ __'{$设置:deepClone(DOC)},功能(err,result){});'(_mongoose驱动程序用于MongoDB_)。关于你的其他建议,你可能会想到其他的错误,你可能想到的那个函数的其他修改? –
你是否愿意查找数据并更新克隆数据MongoDB? –
如果我完全诚实,我不确定你的意思是这个问题,对不起。你的意思是我应该从那个更新语句中拿出'deepClone'函数吗? –