JS排序的问题

   function bubble(arr){
            for( var i = 0; i < arr.length ; i++){
                for( var j = 0; j < arr.length; j++){
                    if(arr[i] > arr[j]){
                        arr[i] = arr.splice(j,1,arr[i])[0];
                    }
                    }
                }
                return arr;
            }

//1. arr[i] = arr.splice(j,1,arr[i])[0]; 这里用了[0],是splice方法被删除掉的元素会形成一个数组吗?我也看到有人用过,为啥搜一下都没看到splice有这种方法

//2. 如果1成立讲道理应该是从小到大排序啊,为什么结果是从大到小

阅读 2.9k
4 个回答

1.splice(index,num,array) 函数 返回的是包含被删除元素的数组,
arr.splice(j,1,arr[i]) 返回的是 包含arr[i]的一个新数组
2.为什么排序从打到小,因为splice操作本身就会改变原数组,每一个一层循环 i 都将 arr[i]变成数组内的最小值,所以最后数组变成由大到小,具体你可以设个断点,看一下

splice方法返回的是被操作后的数组,而不是被操作的数组项形成的数组。 
splice方法有一下三种用法:
删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数。例如,spl ice(0,2)会删除数组中的前两项。
 插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如,splice(2,0, “red”, “green”)会从当前数组的位置2开始插入字符串”red”和”green”。
 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice(2,1, “red”, “green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串”red”和”green”。

splice是直接对本身数组进行操作,返回本身,你应该要用slice把,返回一个新的数组

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题