如何停止forEach中的追加字符串?

时间:2019-06-11 09:27:29

标签: node.js

这就是我得到的:

我尝试将请求发送到服务,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

2 个答案:

答案 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