检查当前迭代元素是否是最后一个?

时间:2015-05-18 13:01:04

标签: javascript

我在迭代一些文件:

  files.forEach((file) => {
    fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => {
      let result = `${data}\n`

      if (err) {
        console.log(err)
      }

      fs.appendFile("book.txt", result, (err) => {
        if (err) {
          console.log(err)
        } else {
          console.log(result)
        }
      })
    })
  })

我现在要做的是:

// If this is the last file:
  let result = `${data}`

// else:
  let result = `${data}\n`

有什么办法可以检查当前的迭代元素是否是最后一个?

2 个答案:

答案 0 :(得分:2)

您传递给forEach()的函数将使用第二个参数中的当前项目索引进行调用。您可以将该索引与数组的长度进行比较并写入:

files.forEach((file, index) => {
    if (index == files.length - 1) {
        // This is the last file...
    }

    // [...]

});

答案 1 :(得分:1)

您可以使用promises和Array.join()

var promisify = require("promisify-node");
var fs = promisify("fs");
Promise.all(files.map((file) => {
  return fs.readFile(__dirname + `/${input}/` + file, 'utf8')
})).then((data) => {
  var result = data.join('\n')
  return fs.appendFile("book.txt", result);
}).then((result) => {
  console.log(result)
}, (err) => { 
  console.log(err) 
});