javascript—在数组只调用一次之后,如何从数组中删除元素?

dluptydi  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(399)

当从 videos 数组,则应在索引为空且之后未定义的情况下删除该数组。问题是 splice_video(); 继续调用同一个元素两次,而该元素只被调用一次就应该从数组中删除(数组中的每个元素都是一个函数)。

function playNextVideo() {
            const videos = [showVideo1,showVideo2,showVideo3,showVideo4,showVideo5];
            const random_video = Math.floor(Math.random() * videos.length);
            const video = videos.splice(random_video, 1);
            const splice_video = video[0]();
            splice_video();
    }
pkln4tw6

pkln4tw61#

在外部而不是内部声明函数数组,以便从数组中删除函数是持久的。

const videoFns = [showVideo1, showVideo2, showVideo3, showVideo4, showVideo5];
function playNextVideo() {
    const randomIndex = Math.floor(Math.random() * videoFns.length);
    const [videoFn] = videoFns.splice(randomIndex, 1);
    videoFn();
}

现场演示:

const videoFns = Array.from(
  { length: 5 },
  (_, i) => () => console.log('video ' + i)
);
function playNextVideo() {
    if (!videoFns.length) return;
    const randomIndex = Math.floor(Math.random() * videoFns.length);
    const [videoFn] = videoFns.splice(randomIndex, 1);
    videoFn();
}
document.querySelector('button').addEventListener('click', playNextVideo);
<button>click</button>

相关问题