JS基础-数组的常用方法-冒泡排序
1.数组
1.关联数组
以数字作为元素下标的数组,就是索引数组。
以字符串作为元素下标的数组,就是关联数组。
2.js的关联数组
ex:在php中
$array=["name"=>"Tom"]
var unames=[];
unames["西游记"]="孙悟空";
unames["红楼梦"]="林黛玉";
unames["三国"]=["刘备","关羽","张飞"];
注意:
1.关联数组中,字符串下标的内容是不记录到length中的。
2.只能通过 字符串 做下标取值。
3.for...in
遍历出任意数组中的字符串下标以及索引下标。
语法:
for(var 变量 in 数组){
//变量:字符串下标或索引下标
}
练习:
定义一个数组,数组中包含索引和字符串下标的元素。用for...in遍历出数组中的元素并打印在控制台。
2.冒泡排序
1.什么是冒泡排序
排序算法之一,将一组数据进行排序,小的数字往前排,大的数字往后排。
两两比较,小的靠前,大的往后。
ex:
var arr=[23,9,78,6,45];
特点:
1.比较轮数:
5个数字 比较了4轮
6个数字 比较5轮
...
n个数字 比较n-1轮
for(var i=1;i<arr.length;i++){
}
2.比较的次数
随着比较的轮数的增加,比较的次数减少
for(var j=0;j<arr.length-i;j++){
//数字换位:异或
if(arr[j]>arr[j+1]){
arr[j]^=arr[j+1];
arr[j+1]^=arr[j];
arr[j]^=arr[j+1];
}
}
练习:
完成以下数组的冒泡排序
var array=[56,84,23,15,90,67];
3.数组的常用方法
1.toString();
作用:将一个数组转换为字符串,并返回转换后的结果
语法:var str=数组名.toString();
2.join()
作用:将数组的元素通过指定的字符连接到一起,并返回连接后的字符串。
语法:var str=数组名.join("字符串");
练习:使用数组实现以下图像:
*
**
***
****
*****
3.concat()
作用:拼接两个或更多的数组,并返回拼接后的结果。
语法:var result=数组名.concat(数组1,数组2,...);
注意:
1.要拼接的数据可以是数组,也可以是普通的数据。
2.concat不会改变原有数组,而是返回拼接后的数组。
练习:
声明两个数组分别保存一些国家的名称
1.数组l:大国
2.数组s:小国
将小国全部移入到大国数组中,并且将小国数组清空。
4.slice()
作用:截取子数组,从指定的数组中,截取几个连续的元素组成一个新的数组。
语法:var arr=数组名.slice(start,[end]);
start:从哪个下标位置处开始截取,取值为正,从前向后算,取值为负,从后向前。
ex: 0 1 2 3
var l=["中国","美国","英国","俄罗斯"];
-4 -3 -2 -1
end:指定结束位置处的下标(不包含),该参数可以省略,如果省略的话,就是从start开始一直截取到数组的尾部。
5.splice()
作用:允许从指定的数组中,删除一部分元素,同时再添加另一部分元素。
语法:arr.splice(start,count,e1,e2,...);
start:指定要添加或删除元素的起始下标位置。
count:指定要删除元素的个数,取值为0表示不删除。
e1,e2:要增加的新元素,可以多个。
返回值:返回的是一个由删除元素所组成的数组。
注意:该函数会改变现有数组。
练习:
声明一个数组,数组元素随意,将数组中第三个元素删除,然后在数组的最后位置添加一个新元素。
6.reverse()
作用:将数组反转
语法:数组名.reverse();
练习:
声明一个数组,内容随意。
调用reverse函数后,将数组打印在控制台查看结果。
7.sort()
1.作用:排序,默认情况下,按照数组元素的 unicode码进行升序排序。
2.语法:数组名.sort();
3.特殊用法
允许自定义排序函数,实现对数字的升序或降序的排序。
语法:数组名.sort(排序函数)
var arr=[12,3,85,7,46];
1.自定义函数(升序)
function sortAsc(a,b){
return a-b;
}
2.自定义函数(降序)
function sortDsc(a,b){
return b-a;
}
3.原理:
1·sortAsc定义两个参数a和b,表示数组中的相邻的两个数字。
2.将sortAsc函数指定给sort函数,数组会自动传递数据到sortAsc函数中,如果sortAsc返回值>0的话,则交换两个数字的位置,否则不变。
4.匿名函数
匿名函数:是一个没有名称的函数,只用一次。
升序:
arr.sort(function(a,b){return a-b;})
降序:
arr.sort(function(a,b){return b-a};)
练习:
1.声明一个整数数组,随意定义数字。
2.页面上添加两个按钮,一个“升序”按钮,一个“降序”按钮。
3.点击升序按钮时,数组按升序排序,并打印在控制台。
4.点击降序按钮时,数组按降序排序,并打印在控制台。
8.进出栈操作
js是按照标准的“栈式操作”访问数组的。
所有的“栈式操作”的特点都是“后进先出”。
1.push()
入栈,在栈顶(数组的尾部)添加指定的元素,并返回新数组的长度。
var arr=[10,20,30];
//向栈顶增加新数据40
var res=arr.push(40); //res的结果:4
2.pop()
出栈,删除(删除栈顶数据)并返回删除元素。
var arr=[10,20,30]
var r1=arr.pop(); //r1结果:30
3.shift()
作用:删除数组头部的(第一个)元素并返回删除元素。
var arr=[10,20,30];
var res=arr.shift();//结果:10
4.unshift()
作用:在数组的头部元素位置处,增加新元素。
var arr=[10,20,30];
var res=arr.unshift(40);//结果:4
练习:
定义一个数组,内容随意,在数组的尾部添加一个新的元素“A”,然后删除数组头部的第一个元素。
4.二维数组
1.什么是二维数组
在一个数组中的元素又是一个数组,也称为数组的数组。
2.二维数组的使用
var names=[
["孙悟空","蜘蛛精","唐三藏"],
["贾宝玉","薛宝钗","王熙凤"],
["宋江","武大郎","武松"]
];
names[0][1]
练习:
根据省份信息,查询城市列表
1.创建一个一维数组,保存几个省份名称;
2.创建一个二维数组,保存上面省份所对应的城市信息;
3.创建一个函数,接收一个身份的名称做参数,打印该省份所对应的城市信息。
JS基础-数组的常用方法-冒泡排序的更多相关文章
- JS基础——数组总结
JS中数组被觉得是一种对象,慢慢的,怎么忽然感觉,JS中仅仅要能够独立出来的概念怎么都能够当成对象来解释呢?有点儿怀疑.继续学吧.先来总结一下JS中数组是怎样详细使用的. 一.创建 数组的创建在JS中 ...
- js基础-数组及数据类型
数组也是引用类型 构造函数创建数组 Object 构造函数类型(所有类型基类) Array 构造函数类型 求幂运算符 ** 2**32-1 数组容量最大 arry.length 如果减小len ...
- js基础---数组方法
数组数据的排序及去重 sort无形参的排序方式 arr1=[2,12,3,15]; var a=arr1.sort();console.log(arr1);console.log(a);//排序会改变 ...
- JS中数组的常用方法
首先,在开始前我们先了解一下什么是数组. 1.什么是数组? 数组就是一组数据的集合,其表现形式就是内存中的一段连续的内存地址,数组名称其实就是连续内存地址的首地址.说白了它就是将一堆数据按照一定的顺序 ...
- Jsの练习-数组其他常用方法 -map() ,filter() ,every() ,some()
map() :映射,对数组中的每一项运行给定函数,返回每次函数调用结果组成的函数. <!DOCTYPE html> <html lang="en"> < ...
- JS基础——数组API之数组操作(filter、map、some、every、sort)
var arr = [1,2,3,4]; forEach arr.forEach((item,index,arr) => { console.log(item) //结果为1,2,3,4 } ...
- js基础——数组的概念及其方法
数组: 概念:是一种特殊的对象. 与普通对象的区别:a.普通对象使用字符串作为属性名,而数组使用数字作为索引来操作元素: b.数组的存储性能比普通对象好 数组的标志:[ ] 数组的索引:是从0开始的整 ...
- js基础----数组
1.数组如何定义 //第一种定义方法 var arr=[1,2,3,4]; //第二种定义方法 var arr=new Array(1,2,3,4); 两者没有任何区别,[]的性能可能略高,因为代码短 ...
- JS求数组最大值常用方法
第一种方法: 循环数组 let ary = [1,2,22,3,99,100],maxNum = ary[0] function getMaxNum(ary){ for(let i = 1,len = ...
随机推荐
- 静态初始化块和main方法哪个先被执行?
直接看代码 public class BlockAndMain { public static void main(String[] args) { System.out.println(" ...
- 地图api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java虚拟机-JVM各种参数配置大全详细
usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...
- 代码: 两列图片瀑布流(一次后台取数据,图片懒加载。下拉后分批显示图片。图片高度未知,当图片onload后才显示容器)
代码: 两列图片瀑布流(一次后台取数据,无ajax,图片懒加载.下拉后分批显示图片.图片高度未知,当图片onload后才显示容器) [思路]: 图片瀑布流,网上代码有多种实现方式,也有各类插件.没找到 ...
- 笔记:MYSQL四种事务隔离级。
1·未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 脏读: 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库 ...
- 剑指offer例题——链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...
- hadoop的job执行在yarn中内存分配调节————Container [pid=108284,containerID=container_e19_1533108188813_12125_01_000002] is running beyond virtual memory limits. Current usage: 653.1 MB of 2 GB physical memory used
实际遇到的真实问题,解决方法: 1.调整虚拟内存率yarn.nodemanager.vmem-pmem-ratio (这个hadoop默认是2.1) 2.调整map与reduce的在AM中的大小大于y ...
- Windows驱动开发VS2012 DDK/WDK的环境配置
[开发Windows驱动的配置是很必要的,下文将详细介绍VS2012如何配置驱动开发环境] [转载] 以下部分内容是转载博客:http://blog.csdn.net/huangxy10/articl ...
- Curl 基本命令
下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名 ...
- extern和include的作用
首先要搞清楚的是.h头文件中都是一些声明性的语句,是不分配内存的,所以头文件中有对函数的声明,有define语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的 ...