排序置顶、非置顶算法,实现置顶后的结果和非置顶的内容排序保持原始序列

简介: 排序置顶、非置顶算法,实现置顶后的结果和非置顶的内容排序保持原始序列


<template>
    <div :class="$options.name">
        <ul>
            <li v-for="(a, i) in items" :key="i">
                <span v-if="a.topIndex">当前置顶索引topIndex:{{ a.topIndex }}</span>
                <span>当前索引index:{{ a.index }}</span>
                <label>{{ a.label }}</label>
                <el-button v-if="a.topIndex" type="danger" plain @click="unTop(a)">取消置顶</el-button>
                <el-button v-else type="primary" plain @click="top(a)">置顶</el-button>
            </li>
        </ul>
    </div>
</template>
<script>
export default {
    data() {
        return {
            topIndex: 0,//置顶索引
            items: [
                { index: 1, label: '显示文本1', },
                { index: 2, label: '显示文本2', },
                { index: 3, label: '显示文本3', },
                { index: 4, label: '显示文本4', },
                { index: 5, label: '显示文本5', },
            ]
        }
    },
    methods: {
        // 对置顶列表进行排序计算
        sortTopList(arr) {
            arr = JSON.parse(JSON.stringify(arr));
            let tops = arr.filter(v => v.topIndex);//筛选出置顶项目
            let upTops = arr.filter(v => !v.topIndex);//帅选出未置顶项目
            tops.sort((prev, next) => prev.topIndex - next.topIndex);//从小到大升序
            upTops.sort((prev, next) => prev.index - next.index);//从小到大升序
            return JSON.parse(JSON.stringify(tops.concat(upTops)));
        },
        //置顶
        top(d) {
            d.topIndex = --this.topIndex;
            this.items = this.sortTopList(this.items);
        },
        //取消置顶
        unTop(d) {
            delete d.topIndex;
            this.items = this.sortTopList(this.items);
        },
    }
};
</script> 

扩展阅读类比排序

image.png


相关文章
|
7天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
45 8
|
7天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
33 7
|
1月前
|
算法
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
这篇文章介绍了动态规划算法中解决最大上升子序列问题(LIS)的方法,包括问题的描述、动态规划的步骤、状态表示、递推方程、计算最优值以及优化方法,如非动态规划的二分法。
61 0
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
|
1月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
48 9
|
1月前
|
算法 搜索推荐 Java
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
基数排序是一种稳定的排序算法,通过将数字按位数切割并分配到不同的桶中,以空间换时间的方式实现快速排序,但占用内存较大,不适合含有负数的数组。
23 0
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
|
1月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
30 0
|
2月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
114 19
|
1月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
68 0
|
2月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
3月前
|
算法 搜索推荐 Java
算法实战:手写归并排序,让复杂排序变简单!
归并排序是一种基于“分治法”的经典算法,通过递归分割和合并数组,实现O(n log n)的高效排序。本文将通过Java手写代码,详细讲解归并排序的原理及实现,帮助你快速掌握这一实用算法。
41 0