ForEach Syntax in Swift, Kotlin and JavaScript

ForEach is a common pattern in programming modern programming languages. Prior to ForEach, the standard approach to iterating over an array of objects was to use a for loop stepping from the first index to the last.

ForEach syntax has extra utility in languages that support many types of collections: a list iterated using ForEach doesn't need to have sequential indexes!


Iterating over a list of objects in a collection: forEach

1let array = ["Hello", "World"]
2for word in array {
3  print(word)

To access the element index within the forEach execution block, use the enumerated function. This can be done using either for or forEach. Note that when using enumerated, the index emitted is just a counter, so it will be emit an accurate accessor value only when used with zero-based arrays.

1let array = ["Hello", "World"]
2array.enumerated().forEach { (index, name) in
3  print("\(word) is at index \(index)")
6for (index, name) in array.enumerated() {
7    print("\(index): \(name)")

Notable is a similarly named--but not the same--language construct used in SwiftUI for iterating over a collection that emits a list of SwiftUI views: ForEach

 1var filters = ["First", "Second", "Third"]()
 3// Emit three SwiftUI Buttons
 4ForEach(filters, id: \.self) { choice in
 5    Button(action: {
 6        print("Filter selected: \(choice)")
 7    }) {
 8        Text(choice)
 9    }

SwiftUI ForEach requires that each item in the collection be unique, and the id property can be passed in-line as in this example.

If the collection of items passed to ForEach conforms to the Swift Identifiable protocol, then it isn't necessary to specify the id property, since Swift will implicitly know which property to use to distinguish the uniqueness of items in the list.


Kotlin's forEach syntax is virtually identical to Swift's.

1val array = listOf("Hello", "World")
3array.forEach { word ->
4  print(word)

To access the array index within the execution block:

1val array = listOf("Hello", "World")
3array.forEachIndexed{ index, word ->
4  print("$word is at index $index")


In JavaScript, the syntax is similar to other languages, but note that ForEach is actually a function call, so don't forget the parentheses!

1const array = [ "Hello", "World"]
3array.forEach(word => {
4  console.log(word)

While forEach is more modern and and a more natural way to think about iterating over lists, I often find using old-school index iteration in JavaScript simpler when used with arrays, since it doesn't have the complexity of being a function call executing a block in a separate scope:

1const array = [ "Hello", "World"]
3for (let i=0; i < array.length; i++) {
4  console.log(array[i])