Javascript 如何克隆一个对象并在其中一个对象上迭代';谁的财产?
我正在尝试克隆承诺中的一个对象,并迭代它的一个属性 这似乎是可行的,您得到了一个objest数组,其中Javascript 如何克隆一个对象并在其中一个对象上迭代';谁的财产?,javascript,object,promise,clone,bluebird,Javascript,Object,Promise,Clone,Bluebird,我正在尝试克隆承诺中的一个对象,并迭代它的一个属性 这似乎是可行的,您得到了一个objest数组,其中page_num从2增加到44 var allOptions = _.map(_.range(2, 45), function(page){ return { body: { action: 'read', page_num: page, page_size: 5 }} }) Promise.map(allOptions, function(options){ return Promi
page_num
从2增加到44
var allOptions = _.map(_.range(2, 45), function(page){
return { body: { action: 'read', page_num: page, page_size: 5 }}
})
Promise.map(allOptions, function(options){
return Promise.resolve(options).delay(3000)
}).then(console.log)
但是,上面的示例每次都是从头开始创建对象
当我尝试克隆一个现有的对象时,我会得到下面描述的行为
var masterOptions = { body: { action: 'read', page_num: 1, page_size: 5 }}
var allOptions = _.map(_.range(2, 45), function(page){
var options = _.clone(masterOptions)
options.body.page_num = page
return options
})
Promise.map(allOptions, function(options){
return Promise.resolve(options).delay(3000)
}).then(console.log)
或
这些似乎不起作用,options对象似乎在迭代上次生成的对象{body:{action:'read',page_num:44,page_size:5}
我如何克隆一个对象并迭代它的一个属性?是的,你说得对,下划线的
克隆功能不深
这意味着您要克隆的对象的每个属性都将是一个新的变量,但该变量将仅通过复制相应原始属性的内容来填充
这实际上在的文档中提到过。有人说:
创建所提供的普通对象的浅复制克隆。任何嵌套
对象或数组将通过引用进行复制,而不是复制
因此,正如您所猜测的,下划线中现在似乎没有现成的深度复制功能。使用您在评论中提到的方法确实可以解决您的问题:)我相信我通过切换到lodash的方法解决了这个问题。这与promises/bluebird有什么关系?您在console.log(allOptions)
中没有得到相同的行为吗?
Promise.map(_.range(2, 45), function(page){
var options = _.clone(masterOptions)
options.body.page_num = page
return Promise.resolve(options).delay(3000)
}).then(console.log)