диапазон числа с циклом javascript

0

Мне нужно сделать диапазон от 1 до 15 и какой-то обратный. В настоящее время я использую следующий скрипт:

$scope.range = (min, max) ->
  input = []
  i = min
  while i < max
    input.push i
    i += 1
  input

так что если range(1,15) будет равен 1 2 3 4 5 6 7 8 9 10 11... 15

То, что мне нужно, в том случае, если range(10, 3) должен положить 10 11 12 13 14 15 1 2 3

Теги:
coffeescript

2 ответа

0
Лучший ответ

Решение основано на понимании, которое должно идти до 15, и порядок должен быть таким, как показано:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

function range(min, max) {
    var startArr = arr.slice(arr.indexOf(min)),
        endArr = max < arr.length ? arr.slice(0, arr.indexOf(max) + 1) : [];
    return startArr.concat(endArr);
}


range(10, 3);
//[10,11,12,13,14,15,1,2,3]

DEMO

  • 0
    Спасибо, но почему в случае, если может arr = [{id:1, name: 'John'}, {id:2, name: 'Mark'}, {id:3, name: 'Jim'},{id:4, name: 'Bob'} ... ]; это не работает?
  • 0
    Потому что это работает из массива целых чисел именно так, как вы показали в вопросе. Если вы хотите, чтобы он работал на массиве объектов, необходимо уточнить критерии
Показать ещё 1 комментарий
1
range = (min, max) ->
    input = []
    i = max
    while i > min
      input.push i
      i -= 1
    input

console.log(range( 10, 50 ));

Просто попробуйте установить я = max, а затем подсчитать я с условием, что я должно быть больше min. Это. Попробуйте код выше.

  • 0
    Я исправил отступ в вашем скрипте. Все еще существует проблема с границами диапазона: вы пропускаете включающую нижнюю границу. Может быть исправлено с помощью цикла while i >= min . И вы даете границы в обратном порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню