文档章节

笔试中经常出现的js数组排序与去重算法

p
 ppmeng1983
发布于 2016/11/17 13:13
字数 758
阅读 25
收藏 1

数组排序比较常用的:冒泡排序、快速排序、sort()方法排序;数组去重方法也有很多。

冒泡排序:

从数组中随便拿一个数与后一位比较,如果前者比后者大,那么两者交换位置,从而遍历数组可以得到排序的效果

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

var arr = [1, 9, 4, 50, 49, 6, 3, 2];

function test(){

for (var i = 0; i < arr.length - 1; i++){

for (var j = i + 1; j < arr.length; j++){

var tempi = arr[i]; //获取第一个值,并与后一个值比较

var tempj = arr[j];

if (tempi > tempj){

arr[i] = tempj;

arr[j] = tempi;//如果前一个值比后一个值大,那么相互交换

}

}

}

console.log(arr); //return arr;

}

test();//调用函数

 

快速排序:

在数组中间那一个值,然后用这个值跟数组里面的值相比较,大于此值的放在一边,小于的也放在一边,然后用concat()合并,再进行比较,如此反复

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

var arr = [1, 9, 4, 50, 49, 6, 3, 2];

function test(arr){

if (arr.length <= 1) return arr;//如果数组只有一位,就没有必要比较了

var index = Math.floor(arr.length / 2);//获取中间值的索引

var cur = arr.splice(index, 1);//截取中间值,如果此处使用cur=arr[index]; 那么将会出现无限递归的错误

var left = [], right = [];//小于中间值的放在left数组里,大于的放在right数组

for (var i = 0; i < arr.length; i++){

if (cur > arr[i]){

left.push(arr[i]);

} else{

right.push(arr[i]);

}

}

return test(left).concat(cur, test(right));//通过递归,上一轮比较好的数组合并,并且再次进行比较

}

test(arr);

sort()方法:简单粗暴

 

1

2

3

4

5

6

7

8

9

10

11

 

var arr = [1, 9, 4, 50, 49, 6, 3, 2];

function test(){

return arr.sort(sortNumber);

}

function sortNumber(a, b){

return a - b;

}

test();

笔者常用的数组去重方法:

方法一:

 

1

2

3

4

5

6

7

8

9

10

11

12

 

var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]

function test(){

for (var i = 0; i < arr.length; i++){

for(var j = i + 1; j < arr.length; j++){

if(arr[i] === arr[j]) arr.splice(j,1);//如果前一个值与后一个值相等,那么就去掉后一个值,splice()可以修改原数组

}

}

return arr;

}

test();

方法二

 

1

2

3

4

5

6

7

8

9

10

11

 

var arr = [1, 1, 4, 50, 50, 6, 2, 2];

function test(){

return arr.filter(function(item,index,array){

return array.indexOf(item) === index;

//或者这样写return array.indexOf(item, index+1) === -1; 如果没有重复项,返回true

//用filter方法,返回ietm对应的indexOf索引值与本身index索引值相等的值,也就是去掉重复的值,filter本身不修改数组,只是会自动遍历数组,去掉重复值后,那么arr就剩下不重复的了

});

}

test();//输出Array [ 1, 4, 50, 6, 2 ]

方法三(ES6)

 

1

2

3

4

5

6

7

 

var arr = [1, 1, 4, 50, 50, 6, 2, 2];

function unique(arr){

return Array.from(new Set(arr));

}

unique(arr);

还有一些方法,我也没用过,前两种是笔者经常用的~~

(完)

本文转载自:https://yuzmb.github.io/2016/11/03/%E7%AC%94%E8%AF%95%E7%BB%8F%E5%B8%B8%E5%87%BA%E7%8E%B0%E7%9A%84js

p
粉丝 0
博文 9
码字总数 0
作品 0
私信 提问
解锁多种JavaScript数组去重姿势

JavaScript数组去重,一个老生常谈的问题了,但这次是解锁多种JavaScript数组去重姿势。 对以下所有的实现算法,都使用以下代码进行粗略测试: 双重循环 双重循环去重实现比较容易。 实现一:...

棕小渐
2018/05/21
0
0
[工作中遇到的难点] 数组去重算法高级应用

今天在做需求的时候遇到了一个问题。有一堆产品对象放在一个数组arrs里,每个对象都有imageUrl,brand(产品品牌),name(产品名称),dimension(产品规格),quantity(产品数量,可能是面积...

向布谷鸟说早安
2018/10/17
0
0
用js来实现那些数据结构及算法—目录

  首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做《学习JavaScript数据结构和算法》(第二版),人民邮电出版社出版的这本书。github代...

zaking
2018/05/10
0
0
js算法初窥03(搜索及去重算法)

  前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索。 1、顺序搜索   其实顺序搜...

zaking
2018/05/20
0
0
面试必备!数组去重的 6 种方法

在前端的面试或笔试中,经常会碰到让你写一段数组去重的代码,今天就带大家一起来学习数组去重的 6 个方法,所谓人无我有,人有我优。当别人掌握了一两种方法时,你就要努力掌握比别人更多的...

一个学前端的码农
2018/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
5
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部