javascript“数组”的常用方法---以及冒泡排序

摘要:
length属性如何更改数组的值?您可以接受一个或两个参数(索引位置)10。split()--删除、插入和替换数组。参数是连接器。原始阵列不变12。indexOf()—返回要查找的对应数组的位置。返回的索引位置是从前到后14。every()--为数组的每个项和数组本身运行给定函数)15。some()--为数组的每个项运行给定的函数。

首先,数组是数据的集合。

可以通过构造函数(var arr = new Array('0','1','hello'))和字面量(var arr = ['0','1'])的方式来创建,

需要注意的是,构造函数创建时,如果值只有一个,而且还是数字,那么他代表数组的长度(var arr = new Array(5),创建一个长度为5的数组)。

数组的索引是从0开始,length属性可以获取数组的长度,同时也可以改变数组的值。

length属性如何改变数组的值?

javascript“数组”的常用方法---以及冒泡排序第1张

 当数组length为0,或者数组为[]时,数组清空。

关于数组的存储

--这个问题是我们在使用数组时需要特别注意的问题!--

我们有的时候会遇见这么一个问题,当两个数组的值一样时,数组不相等,当把一个数组的值赋给另一个数组,另一个数组改变时,两个数组都会发生改变。

javascript“数组”的常用方法---以及冒泡排序第2张

 数组属于复杂类型(引用类型)数据,当我们var一个arr时,变量存储在栈内存,arr的值存储在堆内存,然后给在栈内存中的arr一个地址,这个地址就是arr的值的地址(堆)。

每当我们创建一个新数组,在堆内存中就给新数组新建一个位置。虽然数组里的值相同,但是他们的地址不同,所以不相等。

而当我们把arr赋值给arr3时,其实就是把arr数组的地址赋给了arr3,arr和arr3指向了同一个数组,所以当我们改变arr3时,对应的原arr也会发生改变。

数组的常用方法

 1. Array.isArray() --- 检测是否是数组

javascript“数组”的常用方法---以及冒泡排序第3张

 2. push() --- 接受任意数量的参数,并逐个添加到数组末尾

javascript“数组”的常用方法---以及冒泡排序第4张

 3. pop() --- 从数组末尾移除最后一项

javascript“数组”的常用方法---以及冒泡排序第5张

 4. unshift() --- 在数组前面添加任意个项

javascript“数组”的常用方法---以及冒泡排序第6张

 5. shift() --- 移除数组中的第一个项

javascript“数组”的常用方法---以及冒泡排序第7张

 6. reverse() --- 翻转数组项的顺序

javascript“数组”的常用方法---以及冒泡排序第8张

 7. sort() --- 按照字母表升序排列数组项

javascript“数组”的常用方法---以及冒泡排序第9张

 但我们排序数字时,就会出现问题

javascript“数组”的常用方法---以及冒泡排序第10张

 如果给数字排序,我们需要借助一个函数

1 function compare(a,b){
2      return a-b   
3 }

javascript“数组”的常用方法---以及冒泡排序第11张

 以上为由小到大,如果由大到小排列,只需将函数内部return改为b - a即可。

8. concat() --- 克隆当前数组项,创建一个新数组,参数可以是数组项或者数组

javascript“数组”的常用方法---以及冒泡排序第12张

 9. slice() --- 基于当前数组中的一个或多个项创建一个新数组。可以接受一或两个参数(索引位置)

javascript“数组”的常用方法---以及冒泡排序第13张

 10. splic() --- 对数组进行删除、插入、替换,是最强大的数组方法,返回值是数组,改变原数组

删除

javascript“数组”的常用方法---以及冒泡排序第14张

 参数1:从起始位置开始;参数2:删除的长度

插入

javascript“数组”的常用方法---以及冒泡排序第15张

 参数2为0时,从参数1对应原数组索引位置,后面添加项

替换

javascript“数组”的常用方法---以及冒泡排序第16张

 先删除,后添加,添加是从参数1对应索引位置后面添加。

11. join() --- 将数组转换成对应的字符串,参数就是连接符

javascript“数组”的常用方法---以及冒泡排序第17张

原数组不变

 12. indexOf() --- 返回要查找的相在数组中的位置,没有找的情况下返回-1

两个参数,参1:查找的项;参2:查找的起点位置索引(可选)

javascript“数组”的常用方法---以及冒泡排序第18张

 13.lastIndexOf() --- 从数组的末尾开始向前查找,返回的索引位置还是从前往后数

javascript“数组”的常用方法---以及冒泡排序第19张

 14. every() --- 对数组的每一项运行给定的函数,如果数组每一项都为true,返回true,否则返回false

有两个参数:参1是一个函数(回调函数);参2(可选)  this指向
参1是一个函数(回调函数),这个回调函数又有三个参数(数组项的值,数组项的索引位置,数组本身)

javascript“数组”的常用方法---以及冒泡排序第20张

 15. some() --- 对数组的每一项运行给定的函数,如果该函数对数组的任意一项都返回true,结果就返回true

有两个参数:参1是一个函数(回调函数);参2(可选)  this指向
参1是一个函数(回调函数),这个回调函数又有三个参数(数组项的值,数组项的索引位置,数组本身)

javascript“数组”的常用方法---以及冒泡排序第21张

16. filter() --- 对数组中的每一项运行给定的函数,返回该函数结果为true的项组成的数组

有两个参数:参1是一个函数(回调函数);参2(可选)  this指向
参1是一个函数(回调函数),这个回调函数又有三个参数(数组项的值,数组项的索引位置,数组本身)

javascript“数组”的常用方法---以及冒泡排序第22张

 17. map() --- 对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组,返回的就是数组,不考虑true还是false--映射

有两个参数:参1是一个函数(回调函数);参2(可选)  this指向
参1是一个函数(回调函数),这个回调函数又有三个参数(数组项的值,数组项的索引位置,数组本身)

javascript“数组”的常用方法---以及冒泡排序第23张

 18. forEach() --- 从头到尾遍历数组,为数组中的每个元素调用给定的函数,没有返回值

有两个参数:参1是一个函数(回调函数);参2(可选)  this指向
参1是一个函数(回调函数),这个回调函数又有三个参数(数组项的值,数组项的索引位置,数组本身)

javascript“数组”的常用方法---以及冒泡排序第24张

 19. reduce() 和 reduceRight() --- 迭代数组的所有项,然后构建一个最终返回的值。每一次迭代得到的结果回作为下一次下一次迭代的初始值

方法都有两个参数,参1:每一项执行的函数(有四个参数(前一个值,当前值,数组项索引,数组本身)); 参2:迭代的初始值(可选)

javascript“数组”的常用方法---以及冒泡排序第25张

 如果第二个参数省略,那么就是用数组的第一项当做初始值,这就意味着第一次调用函数时使用了第一项和第二项值作为函数的第一个和第二个参数

reduceRight()和reduce()原理一样,但reduceRight()是从数组的最后一项逐个处理到第一项(从右到左)

冒泡排序

冒泡排序简单说就是将数组的值进行两两比较,一般用来把乱序数组处理为有序数组。

比如,将一个数组,里面的值从小到大排列

javascript“数组”的常用方法---以及冒泡排序第26张

 但是,这并不是最优的方式,我们可以看到,console.log(1)执行了100次。

每一轮比较,都能将最大值排在最后,所以每一轮的下一轮无需在与已经排在后面的最大值进行比

            第一轮            9次比较
            5 8 3 2 15 67 98 12 3 25
            5 3 8 2 15 67 98 12 3 25
            5 3 2 8 15 67 98 12 3 25
            5 3 2 8 15 67 98 12 3 25
            5 3 2 8 15 67 98 12 3 25
            5 3 2 8 15 67 98 12 3 25
            5 3 2 8 15 67 12 98 3 25
            5 3 2 8 15 67 12 3 98 25
            5 3 2 8 15 67 12 3 25 98 -----选出最大值98

            第二轮             8次比较
            3 5 2 8 15 67 12 3 25
            3 2 5 8 15 67 12 3 25
            3 2 5 8 15 67 12 3 25
            3 2 5 8 15 67 12 3 25
            3 2 5 8 15 67 12 3 25
            3 2 5 8 15 12 67 3 25
            3 2 5 8 15 12 3 67 25
            3 2 5 8 15 12 3 25 67 -----最大值67,67无需再跟98比较,因为上一轮已经比较了,最大值已经选出
        
            第三轮             7次比较
            2 3 5 8 15 12 3 25
            2 3 5 8 15 12 3 25
            2 3 5 8 15 23 3 25
            2 3 5 8 15 23 3 25
            2 3 5 8 15 23 3 25
            2 3 5 8 15 3 23 25
            2 3 5 8 15 3 23 25 ---同理本轮最大值25也无需在跟67,98比较,下面同理

            第四轮             6次比较
            2 3 5 8 15 3 23
            2 3 5 8 15 3 23 
            2 3 5 8 15 3 23
            2 3 5 8 15 3 23
            2 3 5 8 3 15 23

            第五轮             5次比较
            2 3 5 8 3 15
            2 3 5 8 3 15
            2 3 5 8 3 15
            2 3 5 3 8 15
            2 3 5 3 8 15

            第六轮             4次比较
            2 3 5 3 8
            2 3 5 3 8
            2 3 3 5 8
            2 3 3 5 8

            第七轮             3次比较
            2 3 3 5 --2跟3比较
            2 3 3 5 --3跟3比较
            2 3 3 5 --3跟5比较

            第八轮              2次比较
            2 3 3 --2 3
            2 3 3 --3 3

            第九轮              1次比较
            2 3

总结:数组有10个数值,十个数值只需要进行9轮比较

轮数 = 数组length - 1

每一轮的比较次数 = 数组长度 - 当前轮数

 for循环i从零开始,所以当前轮数 = i + 1

javascript“数组”的常用方法---以及冒泡排序第27张

 相同的结果,但这次console.log(1)只进行了45次。

 1         var a = [5, 8, 3, 2, 15, 67, 98, 12, 3, 25];
 2         for (let i = 0; i < a.length - 1; i++) {
 3             for (let j = 0; j < a.length - i - 1; j++) {
 4                 if (a[j] > a[j + 1]) {//如果从大到小,只需a[j]<a[j+1]
 5                     let temp = a[j];
 6                     a[j] = a[j + 1];
 7                     a[j + 1] = temp;
 8                 }
 9                 console.log(1);//45次
10             }
11         }
12         console.log(a);//Array(10) [ 2, 3, 3, 5, 8, 12, 15, 25, 67, 98 ]


免责声明:文章转载自《javascript“数组”的常用方法---以及冒泡排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF界面设计—撸大师float和double变量的内存布局~~~~~~下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

61 相机投影原理、相机模型中的坐标系统以及标定方法

0 引言   世界坐标系下的点如何投影到CCD镜头上,通过成像的方式得到点在二维图像上的像素坐标值,这是摄影测量中的一个基础而核心的问题。这个问题中核心的东西有两个:1、坐标系的定义及其空间转换矩阵  2、成像中的误差 下面将从这两个角度对这个问题进行详细探讨。文章参考了 # 陈建平: 《相机成像原理》PPThttps://blog.csdn.net/...

Android 属性自定义及使用获取浅析

一、概述 相信你已经知道,Android 可使用 XML 标签语言进行界面的定义。每个标签中有一个一个的属性,这些属性有相应的属性值。例如: <cn.neillee.composedmenu.RotatingArcMenu android: android:layout_width="wrap_content" android:layout_...

MYSQL 命令行工具自动登录的方法

MYSQL 命令行工具自动登录的方法 1. 需求提出 由于在linux 环境下,经常需要使用mysql(command-line tool) 终端连接到MYSQL DB服务。 其中大致的语法如下: mysql [options] db_name 比较重要的option 参数有: --database=db_name, -D db_name --host=...

Haar小波分析

一 尺度函数与小波函数     基本尺度函数定义为:,对其向右平移任意 k 个单位,构成函数族 , 该函数族在 空间中正交,证明如下:    1 ;    2 当 m 不等于 k 时,    函数族  构成一组正交基,并形成  子空间。在  子空间中,任意函数均可表示为  的线性组合,。    将函数族  构造宽度缩小一半,则可形成宽度为  的一组正交基...

爬取QQ音乐(讲解爬虫思路)

一、问题描述: 本次爬取的对象是QQmusic,为自己后面做django音乐网站的开发获取一些资源。   二、问题分析: 由于QQmusic和网易音乐的方式差不多,都是讲歌曲信息放入到播放界面播放,在其他界面没有media的资源,喜马拉雅的则不是这样的,可以参考我爬取喜马拉雅的blog与代码:https://www.cnblogs.com/future-d...

Mybatis分页插件PageHelper简单使用

1. 引入分页插件 引入分页插件有下面2种方式,推荐使用 Maven 方式。 1). 引入 Jar 包 你可以从下面的地址中下载最新版本的 jar 包 https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/ http://repo1....