一、数组的概念和特点
数组是对象的一种,数组内的数据会按照顺序进行排列,是一种有序集合
数据按照顺序被标记,序号,也叫索引,从0开始
数组拥有length属性,用来表示自身有多少个数据
因为索引的规律为从0开始递增,通过length属性标记数据总数,所以可以通过循环语句遍历数组
for ( var i= 0 ; i< arr. length; i++ ) {
console. log ( arr[ i] ) ;
}
二、数组的创建
字面量:var arr1 = [数据1, 数据2, 数据3, ...];
创建函数:var arr2 = new Array(数据1, 数据2, 数据3, ...);
区别:当有且只有一个数值型数据时,字面量创建就是作为一个数据,构造函数创建会作为数组的长度,每个位置为undefined
三、数组的操作
索引+长度操作
原生操作,底层操作,所有数组操作功能的基础 查:arr[索引]
改:arr[索引] = "新值"
增:默认只能在数组的最后增加
需要配合数组数据位置的移动,完成所需的指定位置的增加 删:默认只能从数组的最后开始删除
删除数据的原理:减少长度 需要配合数组数据位置的移动,完成所需的指定位置的删除 数组长度可修改
比原始长度大时,多出来的位置,用empty
补齐,读取时为undefined
原始长度小时,从数组最后开始删除 方法操作:将数组作为对象,其自身的函数,叫数组的方法
arr.push()
:最后一位新增arr.pop()
:删除最后一位arr.shift()
:删除第一位arr.unshift()
:第一位新增arr.reverse()
:翻转数组中的数据arr.join()
:根据指定字符连接数组中所有数据arr.concat()
:合并数组arr.slice()
:截取arr.splice()
:删除并替换arr.sort()
:排序推荐阅读:数组方法大全
四、数组排序
冒泡排序:依次对数组中相邻数字进行比较(两两比较),大的放后面
var arr = [ 5 , 99 , 2 , 9 , 1 , 5 , 67 , 7 , 10 , 23 ] ;
for ( var i= 0 ; i< arr. length- 1 ; i++ ) {
for ( var j= 0 ; j< arr. length- i- 1 ; j++ ) {
var x;
if ( arr[ j] > arr[ j+ 1 ] ) {
x = arr[ j+ 1 ] ;
arr[ j+ 1 ] = arr[ j] ;
arr[ j] = sum;
}
}
}
console. log ( arr) ;
选择排序:从左向右依次,取数组中的一个数据和后面所有数据做比较,拿到最小的之后,再和当前位置交换
var arr = [ 5 , 99 , 2 , 9 , 1 , 5 , 67 , 7 , 10 , 23 ] ;
for ( var i= 0 ; i< arr. length- 1 ; i++ ) {
var min = arr[ i] ;
var minIndex = i;
for ( var j= i+ 1 ; j< arr. length; j++ ) {
if ( min > arr[ j] ) {
min = arr[ j] ;
minIndex = j;
}
}
arr[ minIndex] = arr[ i] ;
arr[ i] = min;
}
console. log ( arr) ;
五、ES5新增的数组方法
arr.indexOf()
arr.forEach()
arr.map()
arr.filter()
arr.some()
arr.every()
arr.reduce()
arr.includes()
推荐阅读:数组方法大全
六、练习
封装 计算任意两个个位数之间所有数字,两两组合,能组合成哪些奇数,放在数组中,返回出来 函数
1,3 1,2,3 11,12,13,21,22,23,31,32,33 xxx(1, 3); [11, 13, 21, 23, 31, 33] 封装 将数组内所有数据增加30%的 函数
[1, 2, 3, 4] map(arr); [1.3, 2.6, 3.9, 5.2]
有一个全是数值的数组,封装函数,计算总和 有一个全是数值的数组,封装函数,计算平均值 封装函数:从100~999中取出所有的水仙花数,并返回到函数外部 封装函数:判断一个数组是不是回文数组(对称)
封装函数:将一个杂乱的数据,从大到小排序 封装函数,根据指定数据,查询数组中是否存在该数据,如果存在,返回true,如果不存在,返回false some indexOf
[3, 4, 5, 6, 5, 4, 6, 5, 3, 2] count(arr, 5); // 3 count(arr, 7); // false 封装 数组去重的 函数
不允许修改原数组 [3, 5, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1] noRepeat(arr); [3, 5, 2, 4, 6, 1] 现有一个排好序的都是数值的数组,插入一个新数据,要求不影响原排序,封装函数实现
[1, 3, 4, 6, 9] insert(arr, 5); [1, 3, 4, 5, 6, 9]
封装函数,根据指定数据,查询数组中是否存在该数据,如果存在,返回出现次数,如果不存在,返回false 已知数组
var arr = [ {
name : "张三" ,
age : 19 ,
sex : "男" ,
hobby : [ "篮球" , "喝酒" , "乒乓球" ] ,
integral : 90
} , {
name : "大张四" ,
age : 25 ,
sex : "男" ,
hobby : [ "抽烟" , "足球" , "乒乓球" ] ,
integral : 80
} , {
name : "王五" ,
age : 22 ,
sex : "女" ,
hobby : [ "篮球" , "烫头" , "唱歌" ] ,
integral : 100
} , {
name : "张六" ,
age : 18 ,
sex : "女" ,
hobby : [ "跳舞" , "足球" , "rap" ] ,
integral : 85
} ] ;
筛选出所有喜欢打篮球的人员,以新数组存放 计算所有人员的总分,数值 按照年龄升序排序,以新数组存放 给所有的男性的积分(integral)+10分,修改原数组 不允许使用循环语句:for,while,do-while