这是今天在写vue项目时发生的一个小问题,在此记录一下,方便自己的回顾。项目是前后端分离的,前台主要使用了vue-cli3.0 + mintui,是一个移动端的web app包括了后台发布管理的一些功能,其他就先不介绍了,项目后期方便的话我会截取一些代码发布在我的github上,自己也是第一次尝试用mintui框架,当时也是感觉非常的好看,组件化开发的话也是非常方便。这次开发中主要遇到的一个问题是在一个数组排序中,发现排序后的顺序不对,排序方法是经过测试没有问题的,只是这次数据量增加了一些就发生了顺序错乱的问题,刚开始以为是数据的问题,或是其他地方影响了,因为这个排序方法原来一直是可以正常使用的,后来我检查了排序的入参数组,发现没有问题,只好在排序方法的中写几个console看一下结果,发现就是排序出了问题...

  这里先贴一下排序方法:

 // 快速排序  每次选择最左边的数作为基数
function quickSort(arr){
if (arr.length<2) { return arr; }
// 定义左指针
var left=0;
// 定义右指针
var right=arr.length-1;
//开启每一轮的排序
while(left<right){
// 寻找右边比arr[0]小的数的下标
while(arr[right]>=arr[0] && left<right){
right=right-1;
}
// 寻找左边比arr[0]大的数的下标
while(arr[left]<=arr[0] && left<right){
left++;
}
//当左边指针与右边指针相遇后,交换arr[0]与当前两个指针所在的元素
if (right==left) {
let mid=arr[right];
arr[right]=arr[0];
arr[0]=mid;
break;
}
// 当左指针小于右指针的位置,交换两个指针当前位置的元素
let tem=arr[right];
arr[right]=arr[left];
arr[left]=tem;
}
//递归实现
return quickSort(arr.slice(0,left)).concat(arr.slice(left,right+1)).concat(quickSort(arr.slice(right+1)));
}

  去浏览器的控制台测试了好几遍都没有什么问题,包括后来换了冒泡排序都是错乱的结果,这让我有点摸不着头脑,干脆去搜了一下js的数组排序,无意中搜到了sort方法。

 Js中sort()方法原理及使用

sort()  方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要)

,以便进行比较。

语法:arrayObject.sort(sortby);

参数sortby  可选,用来规定排序的顺序,但必须是函数。

 看到这里我突然想到会不会是因为我传入的数组也是字符串,检查了一下代码,发现确实有这种可能,因为我的数组中的元素是从其他字符串数组中循环截取的,那么数字字符串排序比较就会出现这种错乱的问题,因为比较的是Ascii码,然后我加上了parseInt,再次测试,没有问题。

总结:发生问题与bug其实很常见,只要一点点的去推导测试,最终解决问题,也能取得很大收获,这个过程是很爽的,痛并快乐着。。。

最新文章

  1. 在CentOS下搭建自己的Git服务器
  2. 循环数据forin,foreach,for of
  3. Windows下 使用CodeBlocks配置OpenGL开发环境
  4. 关于获取目录的N种方法 的汇总
  5. Spark生态之Spark MLbase/MLlib
  6. UVA - 11882 Biggest Number(dfs+bfs+强剪枝)
  7. 内容高度小于窗口高度时版权div固定在底部
  8. label 不同颜色
  9. oracle数据库在mybatis中使用uuid
  10. C# XmlSerializer将对象序列化以及反序列化(Sqlite数据库)
  11. Activiti(一) activiti数据库表说明
  12. IE8环境下的上传图片预览
  13. 安装使用aria2下载百度网盘内容(转)
  14. [CF1132E]Knapsack【暴力搜索】
  15. es6的解构赋值用途
  16. PHP 变量类型的强制转换 &amp; 创建空对象
  17. wireshark显示过滤器的几种用法(转自他人博客)
  18. centos下redis的导出和导入(限set命令)
  19. mongodb的Limit|skip|投影|排序|消除重复
  20. 99. Recover Binary Search Tree -- 找到二叉排序树中交换过位置的两个节点

热门文章

  1. rpm -qa|grep jdk
  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在线教育视频站点介绍
  3. Elasticsearch安装配置问题
  4. openstack部署cinder
  5. Java日志体系(七)日志框架切换
  6. cnpm 安装vue与vue/cli
  7. 向指定用户发送WebSocket消息并处理对方不在线的情况
  8. Linux三剑客之sed深度实践讲解(上)
  9. vlan端口类型
  10. 20.采集项目流程篇之清洗数据绑定到hive表中