数组


1.数组

是一组数据的集合

1.1使用字面量创建数组

[ 元素1, 元素2, 元素3... ] , 元素代表每一条数据

//字面量创建数组
var name=['涛哥','郑惠中','覃兴千',2,true];
//把地址拷贝一份给name2
var name2=name;
console.log(name);
console.log(typeof name);
1.2数组元素的访问

数组[下标]

下标:数组默认为每个元素添加的编号,从0开始

var city=['北京','杭州','长沙','西安'];
//下标(索引)
console.log( city[2], city[3] );  输出:长沙,西安   元素不存在返回undefined
?
//修改元素
city[2]='成都';  
?
//末尾增加元素
city[city.lengh]="new value"
1.3数组的长度

数组.length 获取数组元素个数

//获取数组的长度(元素个数)
//console.log(laptop.length);
?
在数组的末尾添加元素
数组[ 数组.length ] =
如:
laptop[ laptop.length ]='联想';
1.4 内置构造函数创建对象

new Array(元素1,元素2...)

new Array(长度) 创建数组,初始化长度值,可以添加更多个元素

//内置构造函数
var c=new Array('京东','淘宝','拼多多');
var course=new Array(4);
course[0]='mysql';
course[1]='js';
course[2]='nodejs';
course[3]='git';
course[4]='html';
//console.log(course);
1.5数组的分类

索引数组:以0及以上的整数作为下标

关联数组:以字符串作为下标,需要单独添加元素(不建议使用,可用对象代替)

//关联数组:以字符串作为下标
var person=['涛哥'];
person['sex']='男';
person.phone='18112345678';
//console.log(person); 输出结果:[ '涛哥', sex: '男', phone: '18112345678' ]
//console.log(person.length);
?
遍历数组
?
for (var key in person){
 console.log(key)
}
1.6遍历数组

依次访问数组中的每个元素

for(var k in 数组){ k 代表下标 数组[k] 下标对应的元素}
for(var i=0;i<数组.length;i++){ i 代表下标 数组[i] 下标对应的元素}
遍历关联数组,也可遍历索引数组
for (var key in person){
 console.log(person[key])
}
?
遍历索引数组
for(var i=0;i<person.length;i++){
   console.log(person[i])
}
1.7数组API

应用程序编程接口:JS中指的是预定义的函数和方法

isNaN/isFinite/eval/parseInt/console.log()/hasOnwProperty()/toString()

1.7.1 join() 将数组转为字符串,可以指定元素之间的分隔符,默认是按照逗号分隔

数组转为字符串
var arr=['a','b','c'];
//转为字符串
console.log( arr.toString() );  输出结果为:a,b,c  默认间隔符为逗号
console.log( arr.join('-') );   输出结果为:a-b-c

1.7.2 concat(arr2,arr3...) 拼接多个数组

var arr1=['a','b','c'];
var arr2=['d','e'];
var arr3=['f','g'];
// 拼接多个数组
console.log( arr1.concat(arr2,arr3) );  
输出为:
[
 'a', 'b', 'c',
 'd', 'e', 'f',
 'g'
]

1.7.4 slice() 截取数组元素

array.slice(开始下标,结束下标)

//截取数组元素
var arr=['李德强','郭非凡','张杰波','吕泽林','姚酱','张志霞','刘江','王文飞','程鹏'];
//console.log( arr.slice(3) );      如果只写一个下标,表示从下标3到结束
//console.log( arr.slice(3,6) );
//console.log( arr.slice(-3,-1) );  倒数第几个下标

1.7.5 splice删除数组元素

arr.splice(开始下标,要删除的长度,补充的元素) 返回删除的元素

var arr=['李德强','郭非凡','张杰波','吕泽林','姚酱','张志霞','刘江','王文飞','程鹏'];
//删除数组元素
//console.log(arr.splice(1,3));  表示从下标为1开始删除,删除元素长度为3,返回删除的元素  
//console.log(arr.splice(1));  表示从下标1开始删除,没有长度表示一直删除到末尾

表示从下标为-4开始删除,删除元素长度为0,同时添加元素,'吴文宣','史恭龙','刘酱
console.log(arr.splice(-4,0,'吴文宣','史恭龙','刘酱'));'
console.log(arr);

1.7.6 reverse() 翻转数组元素

var arr=['a','b','c','d'];
//翻转
console.log( arr.reverse() );   
console.log(arr);
输出:
[ 'd', 'c', 'b', 'a' ]
[ 'd', 'c', 'b', 'a' ]

1.7.7 sort() 对数组进行排序,默认是按照编码从小到大

sort( function(a,b){ return a-b; //按照数字从小到大 //return b-a; //按照数字从大到小} )

var arr=[23,9,78,6,45];
//排序
//arr.sort();//按照编码顺序排序
//按照数字排
arr.sort( function(a,b){
  console.log(a,b);
  return a-b;   按照顺序从小到大排序    ---升序
  //return b-a; 按照顺序从大到小排序    ---降序
} );
console.log(arr.sort());

1.7.8 indexOf(v) ,push(v1,v2..) , pop() ,unshift(v1,v2..),shift()

indexOf( v ) 查找数组中是否含有某个元素v,如果找到返回第一个的下标,找不到返回-1

push(v1,v2..) 往数组的末尾添加元素,返回数组的长度

pop() 删除数组末尾的一个元素,返回删除的元素

unshift(v1,v2..) 往数组的开头添加元素,返回数组的长度

shift() 删除数组开头的一个元素,返回删除的元素

//查找元素
var arr=['李德强','郭非凡','张杰波','李德强','吕泽林','姚酱','张志霞','刘江','王文飞','程鹏'];
console.log( arr.indexOf('李德强') );

var arr=['刘江','王文飞','程鹏'];
//末尾添加,返回数组的长度
//console.log(arr.push('祝彩凤','阮运良'));
//删除末尾的一个,返回删除的元素
//console.log(arr.pop());
//开头添加,返回数组的长度
//console.log(arr.unshift('罗京'));
//开头删除,返回删除的元素
// console.log( arr.shift() );
// console.log(arr);

2.二维数组

对数据进行二次分类

//省份
var arr1=['山东','江苏','广东'];
//城市
//var arr2=['济南','青岛','威海','南京','苏州','无锡','广州','深圳','珠海'];
//二维数组:二次分类
var arr3=[
  ['济南','青岛','威海','烟台','日照'],
  ['南京','苏州','无锡','常州'],
  ['广州','深圳','珠海','惠州','东莞']
];
console.log(arr3[2][1]);

访问形式 数组下标

3.字符串对象

包装对象,为了让原始类型数据像引用类型数据,具有属性和方法。

JS提供了三种包装对象:字符串(String)、数值(Number)、布尔(boolearn)

new String() 将数据包装为字符串对象

String() 将任意数据强制转换为字符串

var str1='1';//字面量
var str2=new String("a");//包装为字符串对象
var str3=String("a");
console.log(str3,typeof str3);
console.log(str2,typeof str2);
console.log(str1+2, str2+2);

输出:
a string
[String: 'a'] object
12 a2
3.1转义字符 \

转换字符原来的意义

' 转成普通的引号

\n 转成一个换行符

\t 转成一个制表符(tab键),产生多个连续空格

练习:打印出以下字符串

C:\users\web

3.2 字符串 API

3.2.1. length : 获取字符串的长度

var str='tao is playing单杠';
console.log( str.length );  //获取字符串长度

3.2.2 charAt(下标) : 获取下标对应的字符,可以使用数组写法 字符串[下标]

var str='tao is playing单杠';
//下标
console.log( str.charAt(0),str[0] );

3.2.3 indexOf(value,start) : 查找指定字符串第一次出现的位置,返回下标,找不到返回-1,start为开始查找的下标

3.2.4 lastIndexOf() : 查找指定字符串最后一次出现的位置,返回下标,找不到返回-1

var str='javascript';
//查找字符串
console.log( str.indexOf('a') );
console.log( str.lastIndexOf('a') );

3.2.5 toUpperCase() :英文字母转大写

3.2.6 toLowerCase(): 英文字母转小写

var str='JavaScript';
console.log( str.toUpperCase() );//转大写
console.log( str.toLowerCase() );//转小写

3.2.7 slice(start, end) : 截取字符串,start开始的下标,end结束的下标,不包括end本身,end为空截取到最后,下标为负数表示倒数,返回截取的字符串

3.2.8 substr(start, count) : 截取字符串,start开始的下标,count截取的长度,count为空截取到最后,下标为负数表示倒数,返回截取的字符串

3.2.9 str.subString(start,end)截取字字符串,不支持负数,也就是不支持倒数,如果下标为负数,自动转为0,start和end部不分前后,小的数字为start,大的为end

3.2.10 split(): 将字符串按照指定的字符切割为数组

3.3 字符串匹配模式

作用:用于查找,替换字符串

search(value) 用于查找满足条件的第一个下标,类似于indexOf,找不到返回-1

var str = "xiaoran 产于上世纪七八十年代,Xiaoran至今性能仍然强劲,xiaoran一顿饭能吃10盘羊肉,XIAORAN是一个美男子"
//查找
//indexOf
console.log(str.search("xiaoran"))   //普通的正则匹配
console.log(str.search(/xiaoran/i))  //不区分大小写   i -->ignore 忽略大小写

match(value)

var str = "xiaoran 产于上世纪七八十年代,Xiaoran至今性能仍然强劲,xiaoran一顿饭能吃10盘羊肉,XIAORAN是一个美男子"
//查找
//indexOf
console.log(str.match(/XIAORAN/i))   //不区分大小写   i -->ignore 忽略大小写,返回第一个查找到的内容
console.log(str.match(/XIAORAN/ig))   //查找全部的XIOARAN  -- > 全局查找,返回一个数组  g -->global

返回结果:
[
  'xiaoran',
  index: 0,
  input: 'xiaoran 产于上世纪七八十年代,Xiaoran至今性能仍然强劲,xiaoran一顿饭能吃10盘羊肉,XIAORAN是一个美男子',
  groups: undefined
]

[ 'xiaoran', 'Xiaoran', 'xiaoran', 'XIAORAN' ]

replace(匹配模式,替换值) 查找并替换

var str = "xiaoran 产于上世纪七八十年代,Xiaoran至今性能仍然强劲,xiaoran一顿饭能吃10盘羊肉,XIAORAN是一个美男子"
console.log(str.replace(/xiaoran/ig,"***"))
输出结果:
*** 产于上世纪七八十年代,***至今性能仍然强劲,***一顿饭能吃10盘羊肉,***是一个美男子

4.Math对象

数学对象,不需要创建,可以直接调用API。

PI 获取圆周率

abs() 获取绝对值

ceil() 向上取整

floor() 向下取整

round() 四舍五入取整

max() 获取一组数字最大值

min() 获取一组数字最小值

pow(x,y) 计算x的y次方

random() 获取随机数 >=0 <1

//console.log( Math.PI );//圆周率
//console.log( Math.abs(15-18) );//绝对值 
//console.log( Math.ceil(5.1) );//向上取整   6
//console.log( Math.floor(8.9) );//向下取整  8
//console.log( Math.round(5.4) );//四舍五入  5

//console.log( Math.max(23,9,78,6,45) );  求最大值  78
//console.log( Math.min(23,9,78,6,45) );  求最小值  6
//console.log( Math.pow(5,3) );    幂次方计算   5 的3次方  
/*
console.log( Math.random() );   返回0-1的随机小数

console.log( Math.random() );
console.log( Math.random() );
*/

var arr=['赵曼','程鹏','姚磊','刘酱','王庆举','吴文宣','郝龙祥','崔安邦','吴岩','卢明月','叶鎏微','弋阳','钱权','贺大壮'];
//随机下标
//0~9之间的随机整数
//0~1 * 10  0~9.x   向下取整   0~9
var n=Math.floor( Math.random()*arr.length );
console.log(n, arr[n]);