javascript - 关于排序的一个问题

查看:151
本文介绍了javascript - 关于排序的一个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

        var li = document.getElementsByTagName('li');
         function bubbleSort(){
             for(var i = 0;i < li.length-1;i++){
                 for(var j = 0;j < li.length-i-1;j++){
                     if(parseInt(li[j].innerHTML) > parseInt(li[j+1].innerHTML)){
                         swap(j,j+1);
                     }
                 }        
             }
             return li;
         }
         function swap(beforeIndex,afterIndex){
             var item = li[beforeIndex];
             li[beforeIndex] = li[afterIndex];
             li[afterIndex] = item;
         }
         function ff(){
             var aa = bubbleSort();
             for(var i = 0;i < aa.length;i++){
                 document.write(aa[i].innerHTML);
             }
         }

使用js往ul中添加li,然后使用冒泡排序,将ff函数绑定在一个按钮上,但是结果不正确,请问问题出在哪?
假如li里分别是5,4,3,2,1最后只输出5

解决方案

  1. 这个代码的作用域十分混乱,很容易出现变量互相影响的问题。

  2. 如果要修改这段代码仅仅达到你所需要而目的,首先需要改这个函数:

    function swap(beforeIndex,afterIndex){
        var item = li[beforeIndex].innerHTML;
        li[beforeIndex].innerHTML = li[afterIndex].innerHTML;
        li[afterIndex].innerHTML = item;
    }

li[i]是dom元素,li[1] = li[2]这种操作是无效的。

然后是最后的document.write(aa[i].innerHTML),因为执行的时候文档流已经关闭,所以每次使用document.write都会清空文档,因此只会显示最后的aa[i].innerHTML,建议改成console.log或者append等方式。

这篇关于javascript - 关于排序的一个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆