一、数组对象
1、创建数组
(1)字面量创建
var arr = [1,2,3];
(2)利用new Array()创建
var arr = new Array(2)
var arr1 = new Array(2,3)
2、检测是否为数组
(1)instanceof运算符,用来检测是否为数组。
var arr = [1,2,3];
var arr1 = 'hah';
var obj = {};
console.log(arr instanceof Array);
console.log(arr1 instanceof Array);
console.log(obj instanceof Array);
true
false
false
(2)Array.isArray(参数),它是H5新增的方法,IE9以上版本支持。
var arr = [1,2,3]
console.log(Array.isArray(arr));
true
(3)举例 翻转一个数组,此时必须保证输入的是数组才可以执行翻转程序,否则输出这个参数必须是数组格式的提示。
function reverse(arr){
if(arr instanceof Array){
var newArr = [];
for(var i = arr.length-1;i >= 0;i--){
newArr[newArr.length] = arr[i];
}
return newArr;
}else{
return "error 参数必须是数组格式";
}
}
console.log(reverse([1,2,3,4,5]));
console.log(reverse(1,2,3));
[ 5, 4, 3, 2, 1 ]
error 参数必须是数组格式
3、添加删除数组元素的方法
方法名 | 说明 | 返回值 |
---|
push(参数1,…) | 末尾添加一个或多个元素,修改原数组 | 返回新的长度 | pop() | 删除数组最后一个元素,把数组长度减1,无参数,修改原数组 | 返回它删除的元素的值 | unshift(参数1,…) | 向数组的开头添加一个或更多元素,修改原数组 | 返回新的长度 | shift() | 删除数组的第一个元素,数组长度减1,无参数,修改原数组 | 返回第一个元素的值 |
(1)添加数组元素
基本格式为:
数组名.push(参数1,...);
数组名.unshift(参数1,...)
举例如下;
var arr = [1,2,3];
console.log(arr.push(4,5,6,'haha'));
console.log(arr);
var arr = [1,2,3];
console.log(arr.unshift(4,5,'haha'));
console.log(arr);
(2)删除数组元素
基本格式为:
数组名.pop();
数组名.shift();
举例如下;
var arr = [1,2,3];
console.log(arr.pop());
console.log(arr);
var arr = [1,2,3];
console.log(arr.shift());
console.log(arr);
案例
有一个包含工资的数组[1500,1200,2000,2100,1800],要求把数组中工资超过2000的删除,剩余的放到新的数组里。
var arr = [1500,1200,2000,2100,1800];
var newArr = [];
for(var i = 0;i < arr.length;i++){
if(arr[i] < 2000){
newArr.push(arr[i]);
}
}
console.log(newArr);
[ 1500, 1200, 1800 ]
也可以利用数组遍历的for of方法实现我们需要的功能。
var arr = [1500,1200,2000,2100,1800];
var a = [];
for(var k of arr){
if(k < 2000){
a.push(k)
}
}
console.log(a);
[ 1500, 1200, 1800 ]
4、数组排序
方法名 | 说明 | 是否修改原数组 |
---|
reverse() | 颠倒数组中元素的顺序,无参数 | 会改变原来的数组,返回新数组 | sort() | 对数组的元素进行排序 | 会改变原来的数组,返回新数组 |
基本格式为:
数组名.reverse();
数组名.sort();
举例如下;
var arr = [1,2,3,4];
arr.reverse();
console.log(arr);
var arr = [1,2,1,3,43,0,98,13];
arr.sort();
console.log(arr);
var arr = [1,2,1,3,43,0,98,130,132];
arr.sort(function(a,b){
return b - a;
});
console.log(arr);
5、数组索引
方法名 | 说明 | 返回值 |
---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号,如果不存在,则返回-1 | lastindexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号,如果不存在,则返回-1 |
注:默认都是从指定数组索引的位置开始检索,并且检索方式与运算符“===”相同,即只有全等时才会返回比较成功的结果。 举例如下:
var arr = [1,2,1,3,4,1,5];
console.log(arr.indexOf(1));
console.log(arr.lastIndexOf(1));
console.log(arr.indexOf(1000));
console.log(arr.lastIndexOf(1000));
案例
去除重复数组元素。 核心原理:我们遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组中没有出现过,就添加,有就不添加。可以利用indexOf(),如果它返回的是-1,代表新数组里没有该元素,把它添加进新数组就好。
function unique(arr){
var newArr = [];
for(let i = 0;i < arr.length;i++){
if(newArr.indexOf(arr[i]) === -1){
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [1,2,4,2,3,1,5,4,5,5,7];
console.log(unique(arr));
6、数组转换为字符串
方法名 | 说明 | 返回值 |
---|
toString() | 把数组转换为字符串,逗号分隔每一项 | 返回一个字符串 | join(‘分隔符’) | 用于把数组中的所有元素转换成一个字符串 | 返回一个字符串 |
举例如下:
var arr = [1,2,3];
console.log(arr.toString());
console.log(arr.join());
console.log(arr.join(''));
console.log(arr.join('-'));
7、数组的遍历
数组的遍历我们以前已经学过,今天学习一个新的方法。
数组名.map(function(t){
console.log(t)
})
举例:
var arr = [1,2,3,4];
arr.map(function(t){
console.log(t);
});
1
2
3
4
二、字符串对象
1、字符串的创建
(1)直接创建
var str = 'hahhah';
(2)使用new String()来创建,在String构造函数中传入字符串,这样就会在返回的字符串对象中保存这个字符串。
var str = new String('apple');
2、字符串的长度属性
字符串.length,如:
var str = new String('apple');
console.log(str.length);
3、字符串的不可变性
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间,因为我们字符串的不可变,所以不要大量的拼接字符串。
4、根据字符返回位置
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串。
方法名 | 说明 |
---|
indexOf(‘要查找的字符’,开始的位置) | 返回指定内容在原字符串中的位置,如果找不到就返回-1,开始的位置是index索引号 | lastindexOf() | 从后往前找,只找第一个匹配的 |
var str = 'hahahah';
console.log(str.indexOf('a'));
console.log(str.indexOf('a',[2]));
console.log(str.indexOf('a',4));
console.log(str.lastIndexOf('a'));
1
3
5
5
举例如下:查找字符串“ojuoojoo”中所有o出现的位置及次数 思路: (1)先查找第一个o出现的位置 (2)只要indexOf()返回的结果不是-1就继续往后查找 (3)因为indexOf()只能查找到第一个,所有后面的查找,利用第二个参数,当前索引加1,从而继续查找。
var str = 'ojuoojoo';
var index = str.indexOf('o');
var num = 0;
while(index != -1){
console.log(index);
num++;
index = str.indexOf('o',index+1);
}
console.log("o出现的次数是:",num);
0
3
4
6
7
o出现的次数是: 5
5、根据位置返回字符
方法名 | 说明 | 使用 |
---|
charAt(index) | 返回指定位置的字符(index 字符串的索引号) | str.charAt(0) | charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(0) | str[index] | 获取指定位置处字符 | HTML5,IE8+支持和charAt()等效 |
var str = 'asdfg';
console.log(str.charAt(2));
for(var i = 0;i < str.length;i++){
console.log(str.charAt(i));
}
var str1 = 'abcdef';
console.log(str1.charCodeAt(3));
var str2 = 'asdf';
console.log(str2[1]);
案例:判断一个字符串‘abodjooheohoi’中出现次数最多的字符,并统计其次数。 核心算法:利用charAt()遍历这个字符串,把每个字符都储存给对象,如果对象没有该属性,就为1,如果存在就+1,然后遍历对象,得到最大值和该字符。
function fun(str) {
var obj = {};
for(let i = 0;i < str.length;i++){
chars = str.charAt(i);
if(obj[chars] != null){
obj[chars]++;
}else{
obj[chars] = 1;
}
}
console.log(obj);
let ch = '';
let max = 0;
for(var k in obj){
if(obj[k] > max){
max = obj[k];
ch = k;
}
}
console.log(`最大值为${max},该字符为${ch}`);
}
fun('abodjooheohoi');
{ a: 1, b: 1, o: 5, d: 1, j: 1, h: 2, e: 1, i: 1 }
最大值为5,该字符为o
6、字符串操作方法
方法名 | 说明 |
---|
concat(str1,str2,str3…) | concat()方法用于连接两个或多个字符串,拼接字符串,等效于+,+更常用 | substr(start,length) | 从start位置开始(索引),length是取的个数 | slice(start,end) | 从start位置开始(索引),截取到end的位置(索引),注意:end取不到 | substring(start,end) | 从start位置开始(索引),截取到end的位置(索引),注意:end取不到,基本和slice相同,但是不接受负值 | toLowerCase() | 字符串中的字母转成小写 | toUpperCase() | 字符串中的字母转成大写 | replace(‘被替换的字符’,’替换为的字符’) | 替换字符,它只会替换第一个字符 | split(‘分隔符’) | 将字符转换为数组并用分隔符分开 |
(1)concat(str1,str2,str3…)
var str1 = 'hello';
var str2 = 'world';
console.log(str1.concat(str2));
console.log(str1+str2);
(2)substr(start,length)
var str = 'helloworld';
console.log(str.substr(2,2));
(3)slice(start,end)
var str = 'l love China'
console.log(str.slice(-1));
console.log(str.slice(-2));
console.log(str.slice(2,6));
console.log(str.slice(2));
(4)substring(start,end)
var str = 'l love China'
console.log(str.substring(2,6));
console.log(str.substring(2));
console.log(str.substring(-2));
(5)toLowerCase()与toUpperCase()
var str = 'l love China'
console.log(str.toLowerCase());
console.log(str.toUpperCase());
(6)replace(‘被替换的字符’,’替换为的字符’)
var str = 'aaaab';
console.log(str.replace('a','b'));
var str = 'asdeoofoolo'
while(str.indexOf('o') != -1){
str = str.replace('o','*');
}
console.log(str);
(7)split(‘分隔符’)
var str = 'hello world !';
console.log(str.split(' '));
console.log(str.split('l'));
案例
判断用户名是否合法,案例需求:用户名长度在3~10范围内,不能出现敏感词admin的任何大小写形式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var str = prompt('请输入您的用户名');
var index = str.toLowerCase().indexOf('admin');
if(str.length<3 || str.length>10 || index != -1){
alert('您的用户名不合法');
}else{
alert('输入成功');
}
</script>
</head>
<body>
</body>
</html>
|