нацеливание на последний элемент в массиве в javascript

#javascript #arrays #function #audio

#javascript #массивы #функция #Аудио

Вопрос:

Я получил функцию, которая работает наполовину:

 function prevTrack() {
    if (playlist_index == (playlist.length - 0)) {
        playlist_index = -1;
    } else {
        playlist_index--;
    }
    playlist_status.innerHTML = playlist[playlist_index];
    audio.src = dir   playlist[playlist_index]   ext;
    audio.play();
}
  

Я уверен, что ошибка в playlist_index = -1;
может кто-нибудь, пожалуйста, скажите мне, как настроить таргетинг на последний элемент в массиве?
так что это было бы playlist_index = ???;

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

1. Похоже, вы пытаетесь заставить playlist_index начинаться с 0, когда он превышает последний допустимый индекс. Это правильно?

2. Я пытаюсь сделать так, чтобы, если нажата кнопка prevbtn и воспроизводимая песня была первой песней в массиве плейлистов, она переходила к последней песне массива, я надеюсь, это имеет смысл 🙂

3. Эта функция предназначена для следующего tnt и работает так, как должна: функция switchTrack(next){ if(playlist_index == (playlist.length -1)) { playlist_index = 0; } else { playlist_index ; }

4. этот код работает для ‘nextbtn’, когда воспроизводится последняя дорожка и нажата кнопка nextbtn, она переходит к первой песне, строка playlist_index = 0; выполняется и переходит к первой дорожке, я пытаюсь сделать обратное с ‘prevbtn’, если (playlist_index == (список воспроизведения.длина -0)){ playlist_index = -1; (я думал, что это приведет к тому, что индекс списка воспроизведения перейдет к последней песне в массиве, но это не работает. я думал, что код playlist_index = -1; сделает это, но это не так!

5. Я думаю playlist_index == (playlist.length - 0) , что должно быть playlist_index == 0 и playlist_index = -1; должно быть playlist_index = playlist.length - 1; .

Ответ №1:

Установка индекса в -1 для получения последнего элемента напоминает мне python … в любом случае это не работает в JS. Вы должны установить индекс на playlist.length - 1 .

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

1. if(playlist_index == 0) { playlist_index = (playlist.length -1); это исправило,

Ответ №2:

я думаю playlist_index = playlist.legth - 1

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

1. я попробовал это, мой брат … без шампанского. Я изо всех сил пытаюсь понять, почему этот код работает: if(playlist_index == (playlist.length -1)) { playlist_index = 0; этот код работает, если воспроизводимый звук является последним объектом в массиве, он переходит к первому объекту. итак, как я могу заставить его работать, но вобратный if(playlist_index == (playlist.length -0)) { playlist_index = -1; эта строка здесь, похоже, не работает

2. В первом случае вы говорите «if (lastIndex) go firstIndex», но во втором случае вы говорите «if (never) go oneBeforeFirstIndex». «Если (никогда)» — это потому playlist_index == playlist.length , что никогда не будет истинным (если только playlist_index не разрешено увеличивать больше, чем должно). playlist.length - 1 является самым большим допустимым индексом.

Ответ №3:

Вы хотите установить playlist_index на последний элемент в массиве, если индекс равен нулю, или на первый элемент в массиве?

 const playlist_index = playlist_index === 0
  ? playlist_index = plalist.length - 1
  : playlist_index--;
  

или

 const playlist_index = playlist_index === firstValueOfArray
  ? playlist_index = playlist.length - 1
  : playlist_index--;
  

Ответ №4:

Похоже, вы пытаетесь заставить индекс перемещаться, так сказать, «по всему миру». Есть простой способ сделать это с % помощью оператора modulo .

 const list = ['a', 'b', 'c']
for (let offset = 0; offset < 10; offset  ) {
  const item = list[offset % list.length];
  console.log(item);  
}  

таким образом, вы можете заменить

 if (playlist_index == (playlist.length - 0)) {
    playlist_index = -1;
} else {
    playlist_index--;
}
  

с помощью

 playlist_index = (playlist.length   playlist_index - 1) % playlist.length;