рони,
Прошу объяснить, что выполняет код 1. a!= +a //Если номер чашки не равен номеру чашки * 2? Т.е, если это не "ноль"? 2. (a = names.indexOf(a) + 1, [a *= 2, --a].reverse()) // Для чего тут используется reverse()? Какой массив мы им переворачиваем? 3. (a % 2 && --a, a = a / 2 % names.length, names[a]) // Вообще без внятных догадок...
function nextPerson(a) {
return a != +a ? (a = names.indexOf(a) + 1, [a *= 2, --a].reverse())
: (a % 2 && --a, a = a / 2 % names.length, names[a])
};
|
Alexander Belov,
1.проверка что а это строка 2. можно без reverse 3. если число 17(нечётное) сделать его 16(чётным), разделить на 2, стало 8, получить остаток от деления на длину массива 5 , стало 3 , вернуть элемент массива с индексом 3 , стало "Pat", |
Alexander Belov,
2. если а это строка "Pat" находим индекс элемента массива с этой строкой, было "Pat" стало индекс 3 + 1 , или 4, 4 умножить 2 = 8 , 8 - 1 = 7 итого [8,7] для мнимого удобства переворачиваем reverse , получили [7,8] -- то есть по порядку "Pat" выпьет седьмую и восьмую чашку ... |
рони,
Благодарю! Так понятнее. |
Alexander Belov,
исправил , сейчас (a % 2 && ++a, a = (a - 2) / 2 % names.length,names[a]) |
Alexander Belov,
<script>
var names = ["Kurt", "Dave", "Kris", "Pat", "Steve"]
function nextPerson(a) {
return a != +a ? (a = names.indexOf(a) + 1, [a *= 2, --a].reverse())
: (a % 2 && ++a, a = (a - 2) / 2 % names.length, names[a])
};
for (var i=1; i<=30; i++) {document.write(i + " => " +nextPerson ( i )+"<br>")}
</script>
|
| Часовой пояс GMT +3, время: 19:34. |