2016-09-06 3 views
2

Я пытаюсь создать функцию, которая приведет к повторному набору чисел, если используется в цикле for. Если я использую числа 1-5, я должен увидеть шаблон 1, 2, 3, 4, 5, 1, 2, 3, 4, 5 в консоли.Достижение шаблона номера, например, 1, 2, 3, 1, 2, 3 в JavaScript

Для этого я начинаю с нахождения оставшейся части деления текущего интервала на наибольшее число в наборе (5). Например:

1% 5 дает мне 1,
2% 5 = 2,
3% 5 = 3,
4% 5 = 4,
5% 5 = 0,
и 6 % 5 должно дать мне 1 снова.

Вот функция, я использовал:

function patternItem(x, lastNum) { 
 
    return (x % lastNum); 
 
} 
 

 
console.clear(); 
 
for (var i = 1; i <= 10; ++i) { 
 
    console.log(patternItem(i, 5)); 
 
}

Я пытаюсь сделать это без того, чтобы заставить 5 для каждой оставшейся части 0. Другими словами, я хочу, чтобы избежать написания функция такая или аналогичная:

function patternItem(x, lastNum) { 
    let rem = x % lastNum; 
    return rem != 0 ? rem : lastNum; 
} 

До сих пор мне не повезло. Какую сложную формулу мне понадобится для этой функции?

ответ

2

С небольшим изменением в коде

  1. Изменить начальное значение i 0 и состоянии < вместо <=.
  2. Обновить оператор возврата функции до return x % lastNum + 1 для возврата 1 с напоминанием 0.

function patternItem(x, lastNum) { 
 
    return x % lastNum + 1; 
 
} 
 

 
console.clear(); 
 
for (var i = 0; i < 10; ++i) { 
 
    console.log(patternItem(i, 5)); 
 
}

1

Просто начните с 0 и добавить 1:

function patternItem(x, lastNum) { 
 
    return x % lastNum; 
 
} 
 
for (var i = 0; i < 10; ++i) { 
 
    console.log(patternItem(i, 5) + 1); 
 
}

0

Хорошо, я не знаю, что вы хотите, чтобы ваша функция подписи будет, но вот пример функции, которая должна работать:

function pattern(highestNumber, repeatTimes) { 
    for (var i=0; i<repeatTimes*highestNumber; i++) { 
    console.log(i % highestNumber + 1); 
    } 
} 

В настоящее время

> pattern(5, 3); 
1 
2 
3 
4 
5 
1 
2 
// continues printing 1, 2, 3, 4, 5 until the sequence has been printed 3 times 
Смежные вопросы