In the question Iterate a list as pair (current, next) in Python, the OP is interested in iterating a Python list as a series of current, next
pairs. I have the same problem, but I’d like to do it in JavaScript in the cleanest way possible, perhaps using lodash.
It is easy to do this with a simple for
loop, but it doesn’t feel very elegant.
for (var i = 0; i < arr.length - 1; i++) { var currentElement = arr[i]; var nextElement = arr[i + 1]; }
Lodash almost can do this:
_.forEach(_.zip(arr, _.rest(arr)), function(tuple) { var currentElement = tuple[0]; var nextElement = tuple[1]; })
The subtle problem with this that on the last iteration, nextElement
will be undefined
.
Of course the ideal solution would simply be a pairwise
lodash function that only looped as far as necessary.
_.pairwise(arr, function(current, next) { // do stuff });
Are there any existing libraries that do this already? Or is there another nice way to do pairwise iteration in JavaScript that I haven’t tried?
Clarification: If arr = [1, 2, 3, 4]
, then my pairwise
function would iterate as follows: [1, 2]
, [2, 3]
, [3, 4]
, not [1, 2]
, [3, 4]
. This is what the OP was asking about in the original question for Python.
Advertisement
Answer
Just make the “ugly” part into a function and then it looks nice:
arr = [1, 2, 3, 4]; function pairwise(arr, func){ for(var i=0; i < arr.length - 1; i++){ func(arr[i], arr[i + 1]) } } pairwise(arr, function(current, next){ console.log(current, next) })
You can even slightly modify it to be able to make iterate all i, i+n pairs, not just the next one:
function pairwise(arr, func, skips){ skips = skips || 1; for(var i=0; i < arr.length - skips; i++){ func(arr[i], arr[i + skips]) } } pairwise([1, 2, 3, 4, 5, 6, 7], function(current,next){ console.log(current, next) // displays (1, 3), (2, 4), (3, 5) , (4, 6), (5, 7) }, 2)