Js如何实现升序和降序

前言

在网页中,实现列表的升序和降序,是一个比较常见的操作,尤其是在做一些数据栓选表格的时候,按照索引,时间等特定的参数,提供升序和降序排列的功能的

具体示例

9dd9d89294be252b1c21f6788c990430.gif
sort

原生js

在原生js中主要是操作DOM,遍历节点,通过removeChild()删除节点,而使用appendChild()添加元素去实现的

代码如下所示

// 排序
function sort() {
    // 获取父级元素DOM
    var ul = document.getElementsByTagName('ul')[0];
    // 判断是否包含子元素
    if(ul.hasChildNodes()) {
        var len = ul.childNodes.length; // 子元素的个数
        var arr = [];   // 新数组变量用于存储节点
        for(var i = 0; i<len;i++) {
            arr[i] = ul.childNodes[0]; // 把节点存入数组
            ul.removeChild(ul.childNodes[0]); // 从第一个元素开始删除
        }
     
        // 倒过来遍历所有的节点,降序
        for(var i = len-1;i>=0;i--) {
            ul.appendChild(arr[i]);   // 添加到ul为子元素
        }
       
       
    }
}

如下是html结构

<ul>
    <li>小红-1</li>
    <li>张三-3</li>
    <li>李四-4</li>
    <li>王五-5</li>
</ul>
<input type="button" onclick="sort()" value="降序或升序" />

分析

上面的示例是先把容器html内容清空,最后,把数组的数据以倒排序的方式遍历并填充到之前的ul容器里面

使用原生js方式就是要遍历DOM节点,然后依赖DOM对象的属性或方法操作DOM

Vue版本实现

Vue里面是操作数据,结合数组的sort方法一个简单的方法就可以实现的,原生js想要实现同样类似的效果,那就得不断的去查找DOM节点,操作节点实现的

<template>
    <div class="wrap">
        <div>
            <ul>
                <li v-for="(item,index) in lists" :key="index">{{item.name}}-{{item.lan}}-{{item.chengji}}</li>
            </ul>
        </div>
        <div class="btn">
            <el-button type="primary" @click="handleJiangxu">降序</el-button>
            <el-button type="primary" @click="handleShengxu">升序</el-button>
        </div>
    </div>
</template>

<script>
    export default {
        name: 'ascendDes',
        data() {
            return {
                lists: [
                    {
                        name: '小王',
                        lan: '语文',
                        chengji: 90
                    },
                    {
                        name: '小红',
                        lan: '语文',
                        chengji: '79'
                    },

                    {
                        name: '小李',
                        lan: '语文',
                        chengji: '71'
                    },

                    {
                        name: '小白',
                        lan: '语文',
                        chengji: '85'
                    }
                ]
            }
        },

        methods: {
            // 降序
            handleJiangxu() {
                this.lists = this.lists.sort((a, b) => a.chengji - b.chengji).reverse()    // 反转一下
            },
            // 升序
            handleShengxu() {
                this.lists = this.lists.sort((a,b)=>a.chengji-b.chengji);
            }
        }
    }
</script>

<style lang="scss" scoped>
.wrap {
    text-align: center;
}
.btn {
    margin-top: 20px;
}
</style>

使用vue实现,发现就很简单,使用sort(a,b)方法,其中a代表前一个数,b代表后一个数,做一个差值,就可以判断哪个大,哪个小的

总结

升序和降序在Js中是一个比较常见的操作,做一些简单的排序操作可以基于sort方法实现

JS如何为表单聚焦控件设置醒目的样式

2023-01-31

5520689899f14e93ed1de027bc539e5c.jpeg

Js如何实现当网页超过一屏时导航菜单始终置顶-吸顶盒效果

2023-01-30

98d98688a6b0c155d20de05a298fc357.jpeg

VueJs中如何使用Teleport组件

2023-01-22

513855f67464a0e31d1e594c90fe985e.jpeg

VueJs中如何使用provide与inject

2023-01-21

9e04cbfe2962ade417026744c559a381.jpeg


dbfeb72e63cfc8259729fb747ef36aaf.jpeg

点击左下角查看更多

a8a1243dbc3164ff1ea7f2db9c721b84.gif

<think>好的,我现在需要帮助用户找到冒泡排序算法的升序降序示例代码。首先,我得确认用户的具体需求。他们提到了升序降序的实例代码,并且可能对实现细节感兴趣。用户提供的引用中有几个提到了Java中的冒泡排序选择排序,特别是引用[1][2]直接涉及冒泡排序的升序降序实现。引用[3]提到使用Arrays.sort进行排序,但用户明确想要冒泡排序的代码示例,所以可能需要忽略这个引用。引用[4]关于HTMLJavaScript的排序可能不相关,但用户的问题集中在Java上,所以可以暂时不考虑。 接下来,我需要回忆冒泡排序的基本原理。冒泡排序通过相邻元素的比较交换来排序,每一轮将最大或最小的元素移动到末尾。升序降序的区别在于比较的方向:升序时,如果前一个元素大于后一个,则交换;降序则相反。 然后,我需要检查用户提供的引用内容,看看是否有可以直接引用的代码示例。引用[1]提到了冒泡排序的升序降序,以及指定位置的排序,但具体的代码可能需要从描述中提取。引用[2]提到了System.out.println中的升序排序次数,可能包含降序的代码示例。需要仔细查看这些引用内容中的代码部分。 根据引用[1]的描述,“冒泡排序的升序“冒泡排序的降序”可能对应不同的循环条件。例如,升序时,内层循环可能将较大的元素往后移,而降序则将较小的元素后移。需要确保代码示例正确反映这一点。例如,升序的代码可能是比较相邻元素,如果前面的元素更大就交换;降序则是如果前面的元素更小就交换。 同时,用户可能需要清晰的代码示例解释,所以应该分步骤说明升序降序实现,并指出关键区别。例如,在内层循环中的比较符号不同。此外,引用[3]提到使用Arrays.sort进行快速排序,但用户需要的是冒泡排序的手动实现,所以应避免混淆。 需要确保提供的代码符合Java语法,比如正确使用循环结构条件判断。例如,冒泡排序通常使用嵌套的for循环,外层循环控制轮数,内层循环处理每一轮的比较交换。在升序中,内层循环的条件是arr[j] > arr[j+1],而降序则是arr[j] < arr[j+1]。 另外,用户可能对代码中的关键部分有疑问,比如循环的边界条件,或者交换元素的方式,所以在解释中需要提到这些点。例如,在升序代码中,每次内层循环将最大的元素移动到末尾,因此下一轮可以减少一次比较。 最后,生成相关问题需要考虑用户可能的后续需求,比如优化冒泡排序(如提前终止)、与其他排序算法的比较,或者在不同编程语言中的实现差异。根据引用[2]提到的双向冒泡排序,可能相关问题可以涉及优化方法。同时,引用[1]提到了指定位置的排序,可能用户对特定应用场景感兴趣。 总结,我需要提供清晰的Java代码示例,分别展示升序降序的冒泡排序,解释两者的区别,并生成相关问题,引导用户进一步学习。同时,确保引用正确的来源,如引用[1][2]中的内容,并在回答末尾添加引用标识。</think>### 冒泡排序升序降序实现 #### 1. **冒泡排序原理** 冒泡排序通过相邻元素比较交换实现排序,每一轮将最大(升序)或最小(降序)元素移动到末尾[^1]。 #### 2. **升序代码示例** ```java public static void bubbleSortAsc(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { // 比较相邻元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` **关键点**: - `arr[j] > arr[j+1]` 控制升序比较逻辑 - 外层循环减少比较次数(`-i` 优化)[^2] #### 3. **降序代码示例** ```java public static void bubbleSortDesc(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] < arr[j + 1]) { // 比较方向反转 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` **区别**:仅将比较符号从 `>` 改为 `<`,即可实现降序。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值