JavaScript数组Array

Array数组

1数组的定义

 一系列数据的集合,每一项可以保存任何类型的数据,称为数组的元素,每个元素之间用逗号隔开数组格式:[1,2,3]

2数组的创建方式

2.1字面量(直接量)(推荐)

var arr = [1,2,3];

2.2使用构造函数创建

var arr = new Array();//创建一个空数组

var arr = new Array(7);//创建一个长度为7的数组(数组项都为undefined

var arr = new Array('王大锤',18 ,'普通青年','广州');//创建数组并同时写入数据

3数组的操作

数组的操作主要包括,读取、写入、遍历。

3.1读取

索引值,从0开始,最后一项arr[arr.length-1];属性length表示数组元素的数量。

3.2写入

var arr = [10,20,30];

arr[0] = 100;  arr的第一个数组元素(索引值为0)更改为100

arr[3] = 400; 在数组后添加一个400

arr[arr.length]=400; 这个为通用法,在一个数组的最后添加一个元素。

3.3遍历

获取所有数组元素

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

document.write = arr[i] + ‘<br />’ 

} //将所有的数组元素打印出来

4数组的方法

数组的操作主要可以分为4类,增、删、查(读取)、改。

4.1增加数组元素

4.1.1 unshift在数组前面添加数组元素

arr.unshift(9,8....); 可以在最前面加一个或多个数组元素。

var arr = [10,20,30];

var res = arr.unshift(8,9);  此时console.log(res);其值为5arr.unshift返回值为数组的长度。

4.1.2 在数组最后增加数组元素

1. 使用arr[arr.length]

2. arr.push();其返回值为数组长度。

4.2删除数组元素

4.2.1 pop()删除最后一个数组元素

arr.pop(); 圆括号内必须为空,为删除。其返回值为删除掉的元素。

4.2.2 shift()删除第一个数组元素

返回值为删除掉的元素。

4.2.3 splice();在数组中插入、删除、替换的通用方法

splice(start, deleteNum, ...items);

start:起始索引位置

deleteNum:要删除的数量

items:插入的元素(可以是多个)

返回值为删除掉的元素。

var arr2 = [10, 20, 30];  arr2.splice(1,1)从索引值1开始删除掉一个元素,所以删除元素为20

添加时,arr2.splice(2,0,25); 效果为在2030之间插入25,此处索引值为2,不能是1,可以理解为插入元素时,为在该索引值处的前面添加数组元素。

替换,arr2.splice(2,0,40);效果为将30变为40,返回值为30

splice的返回值由删除元素组成的数组。

4.3 join()

join(separator) 返回字符串值,其中包含了连接到一起的数组的所有元素

separator为分隔符,默认为逗号

var arr = [lilei,wangmeimei,hehe];

document.write=(arr.join(‘,’));

效果为显示: lilei,wangmeimei,hehe

4.4 concat()

concat() 返回一个新数组,这个新数组是由调用这个方法的数组和参数组成

参数可以是多个

5 数组排序

5.1冒泡排序法

/*

冒泡排序

两两进行判断,把最大的值移动到最后

[10,2,8,55,32,18,9,11,30,16,19,20]

 */

var arr = [10,2,8,55,18,32,9];

document.write('<h4>' + arr.join() + '</h4>');

// 外层循环:执行多次内循环

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

// 内层循环:把最大值移动到最后

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

if(arr[i] > arr[i+1]){

// 如果当前数字比后面的数字大

// 则交换位置

var temp = arr[i];//10

arr[i] = arr[i+1];//2

arr[i+1] = temp

}

document.write('<p>' + arr.join() + '</p>');

}

document.write('<p class="complete">内循环'+(j+1)+'次:'+ arr.join() + '</p>');

}

console.log(arr);

5.2选择排序法

/*

选择排序法

把当前数字分别跟后面的数字进行对比,把最小的放前面

[10,2,8,55,32,18,9,11,30,16,19,20]

 */

var arr = [10,2,8,55,18,32,9];

// 外层循环

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

// 注意变量初始化的值

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

if(arr[i]>arr[j]){

var temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

console.log(arr);

5.3快速排序法

选择排序法

把当前数字分别跟后面的数字进行对比,把最小的放前面

[10,2,8,55,32,18,9,11,30,16,19,20]

 */

var arr = [10,2,8,55,18,32,9];//[10,2,8,18,32,9] 55 []

function fastSort(arr){

// 递归退出条件

if(arr.length<=1){

return arr;

}

var centerIdx = parseInt(arr.length/2);

var center = arr[centerIdx];//8

// 保存比中间的数小的值

var left = [];

// 保存比中间数大的值

var right = [];//[10,9]

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

if(arr[i]<center){

left.push(arr[i]);

}else if(arr[i]>center){

right.push(arr[i]);

}

}

return fastSort(left).concat(center,fastSort(right));

}

5.4 sort()数组自带排序法

/*

数组自带排序方法

[10,2,8,55,32,18,9,11,30,16,19,20]

 

sort()

* 参数:函数

 */

var arr = [10,2,8,55,32,18,9,11,30,16,19,20];

var res = arr.sort(function(a,b){

/*

如果函数返回正数:说明a>b

如果函数返回负数:说明a<b

如何函数返回0   说明a==b

 */

// if(a>b){

// return 1

// }eles if(a<b){

// return -1;

// }else{

// return 0

// }

return a-b;

});

console.log(res);

res.reverse();//反序排列

6 数组的复制

var num = 100;

var res = num;//res:100

res = 110;

 

// 那么num的值会不会变?

// num被复制

console.log(res,num); 此时不论res如何更改赋值,num的值都不会变化。

而数组这样复制时,

var arr = [10,20,30];

// 复制了快捷方式

var arr_res = arr;

arr_res.push(40);

console.log('arr_res:',arr_res);

console.log('arr:',arr);

arr_res变化时,arr也会跟着变化,这与计算机内存的栈内存和堆内存有关,如果想实现数组的复制,一般有两种方法。

6.1 遍历复制数组

// 实现数组的复制

var arr = [10,20,30];

// 复制方式1

// * 先创建一个空数组

// * 遍历数组,逐个写入新数组

var newArr1 = [];

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

newArr1[i] = arr[i];

}

6.2 slice()复制数组

slice(start[,end]):返回数组的片段或子数组,从start开始到end(不包括end所对应的元素)如果省略end参数,则截取到数组的最后一项

end也可以为负数,为-1时指倒数第一个数组元素。

// 方式2

// 利用数组方法slice()

var newArr2 = arr.slice(0);

newArr2.unshift(9);

console.log(arr,newArr2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值