Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loop through looped sequence of numbers

There is an array of numbers [1,2,3,4,5,6,7,8,9,10]

I need to get all numbers from this sequence that are different from current for more than 2 items, but looped.

For example if current number is one, so new list should have everything except 9,10,1,2,3, or if current number is four so new list should be everything except 2,3,4,5,6.

Is there any technique how to make this, without creating multiple loops for items at start and at the end?

Thank you.

like image 426
Marvin3 Avatar asked Jan 26 '26 14:01

Marvin3


2 Answers

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];          

var exclude = function (start, distance, array) { 
    var result = [];                              

    for (var i = 0; i < array.length; i++) {      

        var d = Math.min(                         
            Math.abs(start - i - 1),              
            Math.abs(array.length + start - i - 1)
        )                                         

        if (d > distance) {                      
            result.push(array[i]);                
        }                                         
    }                                             

    return result;                                
}                                                 
like image 81
Otto Allmendinger Avatar answered Jan 29 '26 04:01

Otto Allmendinger


I think this performs what you asked:

// Sorry about the name
function strangePick(value, array) {
  var n = array.length
    , i = array.indexOf(value);

  if (i >= 0) {
    // Picked number
    var result = [value];

    // Previous 2 numbers
    result.unshift(array[(i + n - 1) % n]);
    result.unshift(array[(i + n - 2) % n]);

    // Next 2 numbers
    result.push(array[(i + 1) % n]);
    result.push(array[(i + 2) % n]);

    return result;
  } else {
    return [];
  }
}

Some tests:

var array = [1,2,3,4,5,6,7,8,9,10];

console.log(strangePick(1, array)); // [9,10,1,2,3]
console.log(strangePick(4, array)); // [2,3,4,5,6]
like image 32
Florent Avatar answered Jan 29 '26 03:01

Florent



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!