Sorry to be blunt, but that tutorial sucks. It doesn't specify what the 'Apply to each' is operating on. What's the input to the loop? It's unclear how that solves the problem.
Of course, if you add a unique integer ID to each element in an array, then you can use that as an index. That's an obvious workaround for iterationIndeces() not working in 'Apply to each' loops, but it's not without faults: namely that you must add unnecessary logic to the flow and that you must iterate through the entire list of data to assign unique integer IDs to each element.
This may be prohibitively intensive, computationally, when working with large sets of data. But any additional delay in run time is undesirable.
However, upon taking a second look, I believe I understand. The 'Apply to each' must be iterating on the 'IDs' array, rather than the original data in the 'Compose' array. This solution seems workable, assuming the range() function does not take a long time to count the length of the input array, and I'm guessing it's pretty fast because it's not really iterative like a single-concurrency 'Apply to each'. A normal workaround would involve preemptively adding ID integers to each element in the array with an iterative loop, but this solution only iterates once, and it can do so concurrently, because it's not iterating on the input data, but on the range() array, and selecting indices from the input data using the current value of the range() iteration.
Pretty smart actually. Still think they could have done a better job of documenting it, because I doubt most folks will stare at that tutorial, scratching their head in confusion, long enough to understand the crucial missing piece of information: the input to the 'Apply to each'!
Thanks @antc2