mattingly890 mattingly890 - 1 month ago 16
Javascript Question

Iterate an array as a pair (current, next) in JavaScript

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.

Answer

Not sure why you want this but you can just make the "ugly" part on 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)