Javascript 如何克隆一个对象并在其中一个对象上迭代';谁的财产?

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

我正在尝试克隆承诺中的一个对象,并迭代它的一个属性

这似乎是可行的,您得到了一个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 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)