文档章节

记录--js中出现的数组排序问题

o
 osc_isezqdgg
发布于 2019/09/18 15:52
字数 897
阅读 21
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

  这里先贴一下排序方法:

 1 // 快速排序  每次选择最左边的数作为基数
 2  function quickSort(arr){
 3       if (arr.length<2) { return arr; }
 4       // 定义左指针
 5       var left=0;
 6       // 定义右指针
 7       var right=arr.length-1;
 8       //开启每一轮的排序
 9       while(left<right){
10             // 寻找右边比arr[0]小的数的下标
11             while(arr[right]>=arr[0] && left<right){
12                   right=right-1;
13             }
14             // 寻找左边比arr[0]大的数的下标
15             while(arr[left]<=arr[0] && left<right){
16                   left++;
17             }
18             //当左边指针与右边指针相遇后,交换arr[0]与当前两个指针所在的元素
19             if (right==left) {
20                   let mid=arr[right];
21                   arr[right]=arr[0];
22                   arr[0]=mid;
23                   break;
24             }
25             // 当左指针小于右指针的位置,交换两个指针当前位置的元素
26             let tem=arr[right];
27             arr[right]=arr[left];
28             arr[left]=tem;
29       }
30       //递归实现
31       return quickSort(arr.slice(0,left)).concat(arr.slice(left,right+1)).concat(quickSort(arr.slice(right+1)));
32 }

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

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

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

,以便进行比较。 语法:arrayObject.sort(sortby); 参数sortby 可选,用来规定排序的顺序,但必须是函数。

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

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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
JavaScript数组排序总结

目录 array排序函数sort 冒泡排序 选择排序 插入排序 快速排序 1、array排序函数sort 使用Array的sort方法。 var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]arr.sort((a,b) => { })console.log(arr...

osc_5g1gl9wp
2019/10/18
6
0
JavaScript基础

一、JavaScript简介 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客户端执行的语言)。 Netscape(网景)接收Nombas的理念,(Brendan...

osc_mf6gua6n
2018/03/09
2
0
【Leetcode 做题学算法周刊】第二期

首发于微信公众号《前端成长记》,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考。主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20.有效的括号...

osc_nd6644ee
04/16
6
0
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

有用的代码: 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分类效果。 后端的分页接口已经写好了,不涉及条件查询,需要传入页码(pageNo)和页面显...

wangwei2134
2018/03/27
7
0
JAVAEE第七周

JSON语法: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来...

osc_apej9ed1
2018/06/05
2
0

没有更多内容

加载失败,请刷新页面

加载更多

如何获取NuGet以安装/更新packages.config中的所有软件包?

问题: I have a solution with multiple projects in it. 我有一个包含多个项目的解决方案。 Most of the third party references are missing, yet there are packages.config file for e......

fyin1314
20分钟前
17
0
Xcode中的版本与版本 - Version vs build in Xcode

问题: I have an app that I developed with Xcode 3 and recently started editing with Xcode 4. In the target summary I have the iOS application target form with fields: identifie......

javail
50分钟前
14
0
如何在Python中将字典键作为列表返回? - How to return dictionary keys as a list in Python?

问题: In Python 2.7 , I could get dictionary keys , values , or items as a list: 在Python 2.7中 ,我可以将字典键 , 值或项作为列表获取: >>> newdict = {1:0, 2:0, 3:0}>>> newd......

技术盛宴
今天
17
0
2020世界人工智能大会开幕首日 百度与浦发银行达成战略合作

本文作者:y****n 7月9日,2020世界人工智能大会开幕首日,百度与浦发银行签署战略合作协议,将在人工智能、金融科技等多个领域进一步深化合作。双方将优势互补,实现人工智能技术在金融领域...

百度开发者中心
昨天
26
0
Java中C ++ Pair 的等价物是什么? - What is the equivalent of the C++ Pair in Java?

问题: Is there a good reason why there is no Pair<L,R> in Java? 有没有一个很好的理由说明Java中没有Pair<L,R> ? What would be the equivalent of this C++ construct? 这个C ++构造的......

富含淀粉
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部