day06 - javascript中的数组Array

1.数组的概念:

  • 内存中的多个容器排列起来,组成的一个大容器。
  • 数组中的每个小容器都有编号,第一个是0,第二个是1,…
  • 咱们把编号叫做下标,来区分每个小容器。
    在这里插入图片描述

2.数组的创建:

语法一:直接创建
	var arr = []; // 创建了一个空数组
	var arr = ["张三","李四","王五"]; // 创建了一个数组,里面存了三个姓名
语法二:构造函数方式创建
	var arr = new Array(); // 创建了一个空数组
	var arr = new Array(3); // 创建了一个长度为3的数组
	var arr = new Array("张三","李四","王五"); // 创建了一个数组,里面存了三个姓名
注意:使用构造函数的方式创建数组的时候,如果其中只有一个整数,表示数组的长度;
	如果是多个值,代表是数组中的多个值;
	如果只有一个值,但不是整数,要报错。

3.数组的获取:

索引:每一个值对应的编号(下标从0开始,依次递增)   arr[0]~arr[length-1]
数组名[索引] //第一个元素的下标是0,第二个是1,......
求数组的长度:arr.length

eg:
var arr = ["张三","李四","王五"];
console.log(arr);  // (3) ["张三", "李四", "王五"]
console.log(arr[1]);  // 李四
console.log(arr[3]);  // undefined 

4.数组的操作:

数组[下标] =;
//如果下标不存在,就是给数组增加元素
//如果下标已经存在,就是将数组中的元素修改
清空数组:
var arr = [1,2,3,4,5];
arr = [];  或  arr.length = 0;
通常,数组中的元素可以是任意类型的数据。一般情况,在数组中的每个元素都是同样的类型,但从语法上来说,数组中的每个元素的类型可以不一样。
var arr = [1,3.14,"Rose",true,null];
console.log(arr); // (5) [1, 3.14, "Rose", true, null]
arr[4] = "Jack"; //将索引为4的null修改为"Jack"
conole.log(arr); // (5) [1, 3.14, "Rose", true, "Jack"]

5.for循环和for in:

//利用for in来遍历的数组:
var arr = [10,20,30,40,50];
for (var i in arr) {    
	console.log(arr[i]);
}
注意:for in中的i变量类型是字符串,而不是数字类型,所以for in专门用来遍历对象,for in不会遍历空元素

//eg:利用for in 求数组中所有元素的和:
var arr = [10,20,30,40,50];
var sum = 0;
for (var i in arr) {
	sum += arr[i];
}
alert(sum);

6.多维数组和稀疏数组:

二维数组 - 数组的嵌套
var arr = [    
	"Jack",    
	"Rose",    
	["王宝强","马蓉"],    
	["贾乃亮","李小璐"]
];
console.log(arr[编号][编号]);
console.log(arr);
console.log(arr[2]);
console.log(arr[2][1]);

在这里插入图片描述

稀疏数组:var arr = [1,2,3,4,,6,,8];

7.数据类型和存储的区别:

1.简单类型/普通类型/基本类型:number、string、boolean、undefined、null、symbol(es6)
简单类型传递值
var num = 11;
var num1 = num;
num = 20;
console.log(num); // 20
console.log(num1); // 11  

在这里插入图片描述

2.复杂数据类型/引用类型:对象、数组、函数(Object、Array、function)
引用类型传递地址 
var obj = {
name:"zs",
age:18
}
var obj1 = obj;
obj1.name = "ls";
console.log(obj.name); // ls
console.log(obj1.name); // ls

在这里插入图片描述
栈和堆:
栈中存储基本类型的值,堆中存放复杂类型的值

  • 栈:先进后出
  • 队列:先进先出
  • 堆:随机分配

8.数组的API:

方法名用法语法
push末尾添加元素数组.push(被添加的值) //返回修改的长度//改变原数组
unshift开头添加元素数组.unshift(被添加的值)
pop末尾删除一个元素数组.pop()
shift开头删除一个元素数组.shift()
splice给数组添加或删除元素数组.splice(开始下标)     // 删除包含开始下标以后的元素数组.splice(开始下标,删除个数) // 删除固定个数数组.splice(开始下标,0,要添加的元素) // 添加数组.splice(开始下标,删除个数,新的元素) // 将数组中的元素删除,再放一个新的元素代替(新的元素可以是多个,用逗号隔开)
reverse数组的翻转数组.reverse()
concat数组的拼接数组.concat(要拼接的值)     // concat方法不改变原数组,需要使用新的变量接收最后的结果 var rest = 数组.concat(要拼接的值)// concat可以拼接多个值// concat可以将拼接的数组变成一个一个的值,拼在一个数组中
slice数组的截取数组.slice(开始下标,结束下标)    // 结果:包含头,不包含尾// 第一个参数不可以省略;第二个参数可以省略,第二个参数省略代表从开始位置截取到数组末尾// 两个下标可以是负数,负数下标就是从数组末尾开始往前数// 两个参数相等为空
join将数组拼接成一个字符串数组.join(“连接符”)    //将数组的每一个值使用连接符连成一个字符串// 连接符:指定要使用的分隔符。如果省略该参数,则使用逗号(,)作为分隔符。
sort数组的排序默认是按ASCII排序数组.sort()    // 默认从小到大排列包含多位数字排序时:数组.sort(function(a,b){ return a - b;//从小到大排序})

9.冒泡排序和选择排序:

//冒泡排序 - 相邻两个元素进行比较,将一个数组中的数字使用循环进行升序或降序的排列
for( var j=0; j<arr.length-1; j++){    
	forvar i=0;i<arr.length-j-1;i++{        
		if( arr[i] >arr[i+1] ){ //如果 前一个>后一个,就交换位置            
			var a = arr[i];            
			arr[i] = arr[i+1];            
			arr[i+1] = a;        
		}    
	}
}
//选择排序 - 先找最大值或最小值,放到最合适的位置;然后在剩下的数字中找最大值或最小值,再排到合适的位置
for( var j=0; j<arr.length-1; j++){    
	forvar i=1;i<arr.length;i++{    
		if( arr[j] >arr[i] ){        
			var a = arr[j];        
			arr[j] = arr[i];        
			arr[i] = a;        
		}    
	}
}
快速排序(递归、数组的方法)
//思路:splice/push/concat
//待排序的数组中任意截取一位(自由选择,取中间)--splice
//用数组中剩下的值和取出的值进行比较,如果小于取出的值,放到一个数组(left),大于同样放入一个数组(right) -- push
//采用同样的方式,分别对left和right重复上面的步骤。--递归
//一旦数组的长度<=1,拼接数组 - concat
var arr = [12, 9, 3, 12, 456, 12, -100, 9, 7, 39, 25];    
function quicksort(arr) {    
	if (Array.isArray(arr)) {//数组
	        //设置基点
	        if (arr.length <= 1) {            
	        	return arr;        
	        }        
	        var midIndex = parseInt(arr.length / 2);//获取中间值的索引        
	        var midValue = arr.splice(midIndex, 1)[0];//获取中间值,改变原数组        
	        var left = [];        
	        var right = [];        
	        for (var i = 0; i < arr.length; i++) {            
	        	if (arr[i] < midValue) {                
	        		left.push(arr[i]);            
	        	} else if (arr[i] > midValue) {                
	        		right.push(arr[i]);            
	        	}        
	        }            
	        	return quicksort(left).concat(midValue, quicksort(right));//递归调用    
		} else {//不是数组,抛错        
			throw new Error('你输入的不是数组');    
	}	
}
console.log(quicksort(arr))
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值