我怎样才能克隆一个对象并迭代它的一个属性?
How can I clone an object and iterate over one of it's properties?
我正在尝试在 promise 中克隆一个对象并迭代它的 属性。
这似乎可行,您得到一个对象数组,其中 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)
或
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)
这些似乎不起作用,选项对象似乎在每次迭代中迭代最后生成的对象 { body: { action: 'read', page_num: 44, page_size: 5 } }
。
如何克隆一个对象并迭代它的一个属性?
是的,你是对的,Underscore 的 clone
函数不是 deep。
这意味着您要克隆的对象的每个 属性 都将是一个 new 变量,但该变量将仅由 填充复制对应原文的内容
Underscore's clone
function (link) 的文档中实际上提到了这一点。内容如下:
Create a shallow-copied clone of the provided plain object. Any nested
objects or arrays will be copied by reference, not duplicated.
所以,正如您所猜测的,Underscore 中似乎没有开箱即用的 深度复制功能 .使用您在评论中提到的 cloneDeep 确实可以解决您的问题:)
我正在尝试在 promise 中克隆一个对象并迭代它的 属性。
这似乎可行,您得到一个对象数组,其中 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)
或
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)
这些似乎不起作用,选项对象似乎在每次迭代中迭代最后生成的对象 { body: { action: 'read', page_num: 44, page_size: 5 } }
。
如何克隆一个对象并迭代它的一个属性?
是的,你是对的,Underscore 的 clone
函数不是 deep。
这意味着您要克隆的对象的每个 属性 都将是一个 new 变量,但该变量将仅由 填充复制对应原文的内容
Underscore's clone
function (link) 的文档中实际上提到了这一点。内容如下:
Create a shallow-copied clone of the provided plain object. Any nested objects or arrays will be copied by reference, not duplicated.
所以,正如您所猜测的,Underscore 中似乎没有开箱即用的 深度复制功能 .使用您在评论中提到的 cloneDeep 确实可以解决您的问题:)