这就是我得到的:
我尝试将请求发送到服务,otherFunction()
就是这样做的。每个请求使用从config.events
加载的不同参数。然后,我想向每个事件附加一个randomParam。
config = { events: [...] }
for(let i = 0; i < 100; i++){
config.events.forEach(element => {
// Get a random string
str = '&randomParam=' + Random.word(10)
element.url += str
console.log(element.url)
otherFunction(element)
// the element.url keep append random word 100 times, but I expect only one word append for each loop
})
}
我想使用深度复制(JSON解析/字符串化)和delete element.url
创建一个const var,然后再次添加它。但这都无法解决我的问题。
实际上,我不知道代码中到底发生了什么以及它是怎么引起的。
当前结果:
https://example.com/exampleApi/index.html?testParam=123&randomParam=rbveostvie
https://example.com/exampleApi/index.html?testParam=123&randomParam=rbveostvie&randomParam=bjanckrbjc
https://example.com/exampleApi/index.html?testParam=123&randomParam=rbveostvie&randomParam=bjanckrbjc&randomParam=rbuunvtdux
预期结果:
https://example.com/exampleApi/index.html?testParam=123&randomParam=rbveostvie
https://example.com/exampleApi/index.html?testParam=123&randomParam=bjanckrbjc
https://example.com/exampleApi/index.html?testParam=123&randomParam=rbuunvtdux
答案 0 :(得分:1)
我假设config.events
是100个元素的数组,并且您想向每个element.url
添加随机字符串。
您不需要两个循环,一个循环就足够了。删除该外部循环,您将得到想要的东西
-编辑-
根据作者稍后发表的评论,应该将外部循环移动以包装otherFunction
调用。
config = { events: [...] }
config.events.forEach(element => {
// Get a random string
str = '&randomParam=' + Random.word(10)
element.url += str
for(let i = 0; i < 100; i++){
otherFunction(element)
}
})
答案 1 :(得分:1)
您需要将随机字符串分配移出内部distance-travelled
循环。
forEach
对于 n = 100 个迭代中的每个 i ,您的内部var config = {
events: [
{
url: "foo"
},
{
url: "baz"
}
]
};
for (let i = 0; i < 100; i++) {
var str = "&randomParam=" + Random.word(10);
config.events.forEach(element => {
otherFunction(Object.assign({}, element, { url: element.url + str }));
});
}
循环将迭代 k = config.events.length 次。通过将随机字符串移到内部forEach
循环之外,可以确保生成 n 个随机字符串,而不是 n * k 个随机字符串。
修改
根据OP更新的说明,实际问题是forEach
被突变了。每次迭代时,它将随机字符串附加到先前设置的URL。因此,我将答案更新为包含element.url
,这将确保Object.assign({}, element, { url: element.url + str })
中的任何对象都不会发生突变。
请在下面查看工作示例:
config.events