является ли это лучшим выразительным условием?

#javascript

#javascript

Вопрос:

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

может ли кто-нибудь исправить этот код, чтобы свести к минимуму?

 var tdLength = 7;
    var num = 0;
    $('a.buttons').click(function(){
        num = ($(this).attr('id') == "next-arrow") ? num  =1 : num -=1;
        num = ( num > tdLength) ? 1 : num;
        num = (num < 1) ? tdLength : num;
        alert(num);
    })
  

заранее спасибо..

Ответ №1:

Мой снимок:

 var num = 0;
function add(amount) {
    num = (num   tdLength - 1   amount) % tdLength   1
    alert(num);
}

$('#next-arrow').click(function(){add(1)});
$('#prev-arrow').click(function(){add(-1)});
  

Злой:

 num = (num   tdLength - 1   amount) % tdLength   1
  

Всегда выдает значение в [1..tdLength] (включительно) для разумных amount значений. Добавлено @Jon ответ.

Комментарии:

1. Я получаю значения, увеличивая и уменьшая значения на 1 . в случае, если мне потребуются значения по 2 или 3 как обращаться? пример: 2,4,6,8 или 3,6,9, например?

Ответ №2:

Одна из идей заключается в том, что вы можете заменить это

 num = (num > tdLength) ? 1 : num;
num = (num < 1) ? tdLength : num;
  

со строкой ниже, которая также гарантированно даст результат в интервале [0 .. (tdLength-1)] :

 num = (num   tdLength) % tdLength;
  

Разница здесь в том, что ваш код использует индекс, основанный на 1, в то время как% приводит к индексам, основанным на 0.

Вы также можете сократить первую строку:

 num = ($(this).attr('id') == "next-arrow") ? num  =1 : num -=1;
  

Поскольку вы контролируете ситуацию, добавьте data-skip (или аналогичный) атрибут к своим ссылкам (например <a id="prev-arrow" data-skip="-1">...</a> ), который позволит вам сделать это вместо:

 num  = parseInt($(this).data('skip'));
  

Итак, все это вместе дает:

 var tdLength = 7;
var num = 0; // "first" is preselected
$('a.buttons').click(function(){
    num = (num   parseInt($(this).data('skip'))   tdLength) % tdLength;
    alert(num);
})
  

Комментарии:

1. num = $(this).data('skip'); собираюсь выполнить конкатенацию строк