仅在 forEach 循环的最后一次迭代中触发函数

ale*_*lex 2 javascript loops

以下代码检查字段是否为文件类型以及其中是否存在实际文件。如果是这种情况,请上传照片并更新建筑物。如果情况并非如此,请使用旧照片更新建筑物:

  fields.forEach(field => {
    building[field.name] = field.value || this.building[field.name]
    if (field.type === 'file' && !util.isEmpty(field.photo.file)) {
      api.uploadPhoto(field.photo.file).then(resp => {
        building[field.name] = resp
        this.updateBuilding(building)
      })
    } else {
      building.logo = this.building.logo // to prevent updating logo
      building.floorplan = this.building.floorplan // to prevent updating logo
      this.updateBuilding(building)
    }
  })
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但由于this.updateBuilding(building)它是在一个循环中,所以它被称为倍数。

如何做到这一点,以便仅在最后一次迭代中调用?

Bla*_*zen 5

建议MDN documentation回调具有forEach三个参数:

  1. 元素值
  2. 元素索引
  3. 正在遍历的数组

您可以使用它来检查当前元素的索引是否等于数组的最后一个索引:

fields.forEach((field, index, array) => {

  // YOUR CODE

  if (index === array.length - 1) {
    // DO SOMETHING
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 我不敢相信我已经研究 JavaScript 多年了,而且我不知道 `forEach` 有一个索引和一个数组值。谢谢! (2认同)