mattingly890 mattingly890 - 11 months ago 101
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 Source

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)