前端实现换一换功能

一、随机换一换指定数量元素不重复

// 定义一个包含所有可能选项的数组

const options = ['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7', '选项8', '选项9', '选项10'];

// 指定要随机选择的元素数量

const numberOfElementsToSelect = 3;

// 定义一个函数,用于从数组中随机选择指定数量的元素

function getRandomElements(array, count) {

    // 创建一个结果数组,用于存储随机选择的元素

    const result = [];

    // 如果要选择的元素数量大于数组长度,则抛出错误

    if (count > array.length) {

        throw new Error('选择的元素数量不能大于数组长度');

    }

    // 使用while循环,直到结果数组达到指定长度

    while (result.length < count) {

        // 生成一个随机索引

        const randomIndex = Math.floor(Math.random() * array.length);

        // 如果随机选择的元素尚未在结果数组中,则将其添加到结果数组中

        if (!result.includes(array[randomIndex])) {

            result.push(array[randomIndex]);

        }

    }

    // 返回结果数组

    return result;

}

// 调用函数并输出结果

try {

    const randomElements = getRandomElements(options, numberOfElementsToSelect);

    console.log('随机选择的元素:', randomElements);

} catch (error) {

    console.error(error.message);

}


二、按顺序换一换,指定个数,末尾不补齐,有几个展示几个,再从头开始换一换

// 定义一个函数来更新显示的内容

let updateDisplay = (list, n) => {

    console.log('list---', list, n);

    // 计算要显示的三个元素的索引范围

    let startIndex = currentIndex;

    let endIndex = startIndex + n;

    let displayElements = [];

    let tmpArr = [];

    if (endIndex > list.length) {

        displayElements =  list.slice(startIndex, list.length);

        currentIndex = 0;

    }else {

        displayElements =  list.slice(startIndex, endIndex);

        // 更新当前索引

        currentIndex = endIndex;

    }

    console.log(tmpArr, displayElements);

    // 更新显示内容

    displayElement.innerHTML = displayElements.join(", ");

};

let currentIndex = 0;

// 定义一个数组,包含要展示的元素

let elements = ["元素1", "元素2", "元素3", "元素4", "元素5", "元素6", "元素7", "元素8"];

// 获取显示元素的容器和按钮元素

let displayElement = document.getElementById("display");

// 初始化显示内容

updateDisplay(elements, 3);


三、按顺序换一换,当前索引超出数组长度,会从头开始补齐数量进行换一换

示例1——

HTML

<div class="container">

    <div id="display">

    <button id="changeButton" onclick="updateDisplay(elements, 4)">换一换

</div>

JS

// 定义一个函数来更新显示的内容

let updateDisplay = (list, n) => {

    console.log('list---', list, n);

    // 计算要显示的三个元素的索引范围

    let startIndex = currentIndex;

    let endIndex = startIndex + n;

    let displayElements = [];

    let tmpArr = [];

    if (endIndex > list.length) {

        tmpArr = list.slice(0, (endIndex - list.length));

        displayElements = list.slice(startIndex, list.length);

        displayElements = displayElements.concat(tmpArr);

        currentIndex = endIndex - list.length;

    }else {

        displayElements =  list.slice(startIndex, endIndex);

        // 更新当前索引

        currentIndex = endIndex;

    }

    console.log(tmpArr, displayElements);

    // 更新显示内容

    displayElement.innerHTML = displayElements.join(", ");

};

let currentIndex = 0;

// 定义一个数组,包含要展示的元素

let elements = ["元素1", "元素2", "元素3", "元素4", "元素5"];

// 获取显示元素的容器和按钮元素

let displayElement = document.getElementById("display");

// 初始化显示内容

updateDisplay(elements, 4);


示例2——

// 定义一个包含所有可能选项的数组

const options = ['选项1', '选项2', '选项3', '选项4', '选项5'];

// 指定要展示的元素数量

const displayCount = 3;

// 当前展示的元素的索引(从0开始)

let currentIndex = 0;

// 定义一个函数,用于按顺序展示指定数量的元素

function displayElementsInOrder(array, count, startIndex) {

    // 创建一个空数组来存储当前要展示的元素

    const displayedElements = [];

    // 使用for循环来按顺序添加元素到展示的数组中

    for (let i = 0; i < count; i++) {

        // 计算当前要添加的元素的索引(考虑循环)

        const elementIndex = (startIndex + i) % array.length;

        // 将元素添加到展示的数组中

        displayedElements.push(array[elementIndex]);

    }

    // 返回当前要展示的元素数组

    return displayedElements;

}

// 定义一个函数,用于按顺序换一换并输出新的元素

function changeElements() {

    // 计算下一个要展示的元素的起始索引

    currentIndex = (currentIndex + displayCount) % options.length;

    // 获取当前要展示的元素数组

    const currentElements = displayElementsInOrder(options, displayCount, currentIndex);

    // 输出当前展示的元素(这里只是打印到控制台,你可以根据需要修改)

    console.log('当前展示的元素:', currentElements);

}

// 初始调用以展示第一批元素

const initialElements = displayElementsInOrder(options, displayCount, currentIndex);

console.log('初始展示的元素:', initialElements);

// 模拟换一换的操作(这里只是连续调用几次来展示效果)

changeElements(); // 第二次展示

changeElements(); // 第三次展示

changeElements(); // 第四次展示(会从头开始)


示例3——

const pageInfo = reactive({

        movieList: [

                { name: '1', url: 'https://movie.douban.com/subject/1292052/', rate: 9.6 },

                { name: '2', url: 'https://movie.douban.com/subject/1295644/', rate: 9.4 },

                { name: '3', url: 'https://movie.douban.com/subject/1291546/', rate: 9.5 },

                { name: '4', url: 'https://movie.douban.com/subject/1292720/', rate: 9.4 },

                { name: '5', url: 'https://movie.douban.com/subject/1292063/', rate: 9.5 },

                { name: '6', url: 'https://movie.douban.com/subject/1291561/', rate: 9.2 },

                { name: '7', url: 'https://movie.douban.com/subject/1295124/', rate: 9.4 },

                { name: '8', url: 'https://movie.douban.com/subject/1292001/', rate: 9.2 },

                { name: '9', url: 'https://movie.douban.com/subject/2131459/', rate: 9.3 },

                { name: '10', url: 'https://movie.douban.com/subject/3541415/', rate: 9.2 },

                { name: '11', url: 'https://movie.douban.com/subject/3541415/', rate: 9.2 },

                { name: '12', url: 'https://movie.douban.com/subject/3541415/', rate: 9.2 }

           ],

           randomMovieList: [],

           currentIndex: 0 // 新增一个变量来跟踪当前索引

})

const changeLimit =()=> {

            const num = 10; // 每次取的数量

            const temp_array = pageInfo.movieList.slice(); // 复制一份电影列表

            const return_array = [];

            for (let i = 0; i < num; i++) {

                if (pageInfo.currentIndex >= temp_array.length) {

                      pageInfo.currentIndex = 0; // 如果索引超出范围,重置为0

                }

                return_array.push(temp_array[pageInfo.currentIndex]);

                pageInfo.currentIndex++;

            }

            pageInfo.randomMovieList = return_array;

            console.log(pageInfo.randomMovieList,'randomMovieList')

 }

示例四——

// 定义一个包含所有可能选项的数组

const options = ['选项1', '选项2', '选项3', '选项4', '选项5'];

// 指定要展示的元素数量(不补齐)

const displayCount = 3;

// 当前展示的元素的起始索引(从0开始)

let startIndex = 0;

// 定义一个函数,用于按顺序获取指定数量的元素(不补齐)

function getNextElements(array, count, currentIndex) {

    const result = [];

    let currentIndexCopy = currentIndex; // 避免直接修改传入的参数

    for (let i = 0; i < count; i++) {

        // 计算当前索引(考虑循环)

        const elementIndex = currentIndexCopy % array.length;

        // 如果索引在数组范围内,则添加元素到结果数组

        if (elementIndex < array.length) {

            result.push(array[elementIndex]);

        }

        // 注意:这里我们不需要检查数组长度是否足够,因为题目要求不补齐

        // 更新索引以获取下一个元素

        currentIndexCopy++;

    }

    // 返回结果数组和新的起始索引(用于下一次调用)

    // 但在这个例子中,我们只需要结果数组,因为新的起始索引可以通过结果数组长度和当前索引计算出来

    return result;

}

// 但由于我们不需要每次都重新计算起始索引,我们可以简化调用过程:

function displayNextElements() {

    // 获取下一批元素

    const nextElements = getNextElements(options, displayCount, startIndex);

    // 更新起始索引(为了下一次调用,但在这个简化例子中我们没有直接用到它)

    // startIndex = (startIndex + displayCount) % options.length; // 这行其实可以省略,因为我们只关心当前批次的元素

    // 输出当前展示的元素(这里只是打印到控制台,你可以根据需要修改)

    console.log('当前展示的元素:', nextElements);

    // 如果需要的话,可以在这里更新UI或执行其他操作

}

// 初始调用以展示第一批元素

displayNextElements();

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容