Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вычисление индекса любого элемента в массиве (https://javascript.ru/forum/events/62249-vychislenie-indeksa-lyubogo-ehlementa-v-massive.html)

Alexander Belov 02.04.2016 00:29

рони,
Прошу объяснить, что выполняет код
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])

};

рони 02.04.2016 00:45

Alexander Belov,
1.проверка что а это строка
2. можно без reverse
3. если число 17(нечётное) сделать его 16(чётным), разделить на 2, стало 8, получить остаток от деления на длину массива 5 , стало 3 , вернуть элемент массива с индексом 3 , стало "Pat",

рони 02.04.2016 00:56

Alexander Belov,
2. если а это строка "Pat" находим индекс элемента массива с этой строкой, было "Pat" стало индекс 3 + 1 , или 4, 4 умножить 2 = 8 , 8 - 1 = 7 итого [8,7] для мнимого удобства переворачиваем reverse , получили [7,8] -- то есть по порядку "Pat" выпьет седьмую и восьмую чашку ...

Alexander Belov 02.04.2016 01:04

рони,
Благодарю! Так понятнее.

рони 02.04.2016 01:25

Alexander Belov,
исправил , сейчас
(a % 2 && ++a, a = (a - 2) / 2 % names.length,names[a])

рони 02.04.2016 01:29

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, время: 20:45.