Array对象
-
创建数组对象的两种方式
- ==字面量方式==
- ==new Array()==
// 1. 使用构造函数创建数组对象
// 创建了一个空数组
var arr = new Array();
// 创建了一个数组,里面存放了3个字符串
var arr = new Array('zs', 'ls', 'ww');
// 创建了一个数组,里面存放了4个数字
var arr = new Array(1, 2, 3, 4);
// 2. 使用字面量创建数组对象
var arr = [1, 2, 3];
// 获取数组中元素的个数
console.log(arr.length);
-
检测一个对象是否是数组
- ==instanceof==
- ==Array.isArray()== HTML5中提供的方法,有兼容性问题
函数的参数,如果要求是一个数组的话,可以用这种方式来进行判断
案例解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
//如何创建数组对象
// 1.数组字面量[]
// var array=[];//空数组
// var numbers=[1,5,3];
// 2.数组的构造函数Array
// var array=new Array();//空数组
// var numbers=new Array(4,2,8);
// console.log(numbers);//(3) [4, 2, 8]
// //获取数组长度
// console.log(numbers.length);//3
//如何判断一个变量是否是数组对象
function fn(arr) {
//判断参数arr 是否是数组对象
//instanceof 前面是变量 后面是数组对象
console.log(arr instanceof Array);
//!arr instanceof Array
//false instanceof Array
//方式1 !一元运算符优先级最高
if(!(arr instanceof Array)) {
console.error('参数err 不是数组对象');
return;
}
//方式2 Array.isArray() 浏览器兼容性问题 支持HTML5的支持
// console.log(Array.isArray(arr));
console.log('正常执行');
}
var d=1;
// var d=[];
fn(d);
</script>
</head>
<body>
</body>
</html>
-
toString()/valueOf()
- ==toString() 把数组转换成字符串,逗号分隔每一项==
- ==valueOf() 返回数组对象本身==
案例解析
//toString()和valueOf() 每一个对象都含有这两个方法,只不过不同对象输出的结果不同
// var arr=[5,1,8,6];
// console.log(arr);//(4) [5, 1, 8, 6]
// //toString()把数组转换成字符串,并且使用逗号分隔每一项
// console.log(arr.toString()); //5,1,8,6
// //valueOf() 返回数组对象本身
// console.log(arr.valueOf());//(4) [5, 1, 8, 6]
-
数组常用方法
演示:push()、shift()、unshift()、reverse()、sort()、splice()、indexOf()
// 1 栈操作(先进后出)
push()
pop() //取出数组中的最后一项,修改length属性
// 2 队列操作(先进先出)
push()
shift() //取出数组中的第一个元素,修改length属性
unshift() //在数组最前面插入项,返回数组的长度
// 3 排序方法
reverse() //翻转数组
sort(); //即使是数组sort也是根据字符,从小到大排序
// 带参数的sort是如何实现的?
// 4 操作方法
concat() //把参数拼接到当前数组
slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
splice() //删除或替换当前数组的某些项目,参数start, deleteCount, options(要替换的项目)
// 5 位置方法
indexOf()、lastIndexOf() //如果没找到返回-1
// 6 迭代方法 不会修改原数组(可选)
every()、filter()、forEach()、map()、some()
// 7 方法将数组的所有元素连接到一个字符串中。
join()
案例解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
//如何学习一个方法
// 1.了解方法的作用
// 2.方法的参数
// 3.方法的返回值
// 4.测试,编写一个demo
// // 1 栈操作(先进后出)
// var arr=[12,2,6,9];
// push()
// arr.push(5);
// console.log(arr);//(5) [12, 2, 6, 9, 5] 返回值在原数组的最后面加了一项
// console.log(arr.push());//5 返回的是修改后的数组的长度
// console.log(arr.push(5));//6
// console.log(arr);//(6) [12, 2, 6, 9, 5, 5]
// //push中参数可以有多个,将来都会添加到数组的最后
// //返回值,就是改变后的数组的长度
// var r=arr.push(5,8,9);
// console.log(r);//9
// console.log(arr); //(9) [12, 2, 6, 9, 5, 5, 5, 8, 9]
// pop() //取出数组中的最后一项,修改length属性
// arr.pop();
// console.log(arr.length);//3 返回的是数组的长度
// console.log(arr);//(3) [12, 2, 6] 返回值中原数组的最后一项被删除了
// console.log(arr.pop());//6 返回的是修改后的数组的最后一项
// // 2 队列操作(先进先出)
// push()
// shift() //取出数组中的第一个元素,修改length属性
// var array=[6,3,2,4];
// var first=array.shift();
// console.log(first); //6 返回的值是原数组的第一项
// console.log(array); // [3, 2, 4] 返回的值中原数组的第一项被取走了
// unshift() //在数组最前面插入项,返回数组的长度
// array.unshift(0);
// console.log(array); //(4) [0, 3, 2, 4]
// console.log(array.unshift()); //4 返回修改后的数组的长度
// // 3 排序方法
// reverse() //翻转数组
// var arr=['b','f','b','f','a','f'];
//翻转 reverse() 不会修改原数组,会把数组翻转之后返回一个新的数组
// var newArray=arr.reverse();
// console.log(newArray);//(6) ["f", "a", "f", "b", "f", "b"]
// sort(); //即使是数组sort也是根据字符,从小到大排序
// arr.sort();
// console.log(arr); //(6) ["a", "b", "b", "f", "f", "f"] sort()直接在原数组上进行排序
// var array=[85,3,5,80];
//默认情况下的sort是对字符编码 从小到大排序 对我们来说无意义
// array.sort();
// console.log(array); //(4) [3, 5, 80, 85]
//字符编码 a--97
// sort()的另一种方法
// array.sort();
// array.sort(compareFunction)
// function compare(a,b) {
// return a-b;
// }
// array.sort(compare);
// console.log(array); //(4) [3, 5, 80, 85] 返回值按照数值的大小排序的
// array.sort(function(a,b) {
// return a-b;
// });
// console.log(array); //(4) [3, 5, 80, 85] 返回值按照数值的大小排序的
// var arr=['aa','dddd','xx','x','vvv'];
// arr.sort(function(a,b) {
// return a.length-b.length; //字符串的长度
// })
// console.log(arr); //(5) ["x", "aa", "xx", "vvv", "dddd"] 想要从大到小排序将b.length-a.length 即可
//对数组排序 从小到大 ---冒泡排序
// function sort(arr,fnCompare) {
// for(var i=0;i<arr.length-1;i++) {
// for(var j=0;j<arr.length-1-i;j++) {
// if (fnCompare(arr[j],arr[j+1])>0) {
// t=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=t;
// }
// }
// }
// return arr;
// }
// var arr=[50,6,2,8];
// sort(arr,function(a,b){
// return a-b;
// })
// console.log(arr);//(4) [2, 6, 8, 50]
// // 带参数的sort是如何实现的?
// // 4 操作方法
// concat() //把参数拼接到当前数组
// slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
// splice() //删除或替换当前数组的某些项目,参数start, deleteCount, options(要替换的项目)
// // 5 位置方法
// indexOf()、lastIndexOf() //如果没找到返回-1
// // 6 迭代方法 不会修改原数组(可选)
// every()、filter()、forEach()、map()、some()
// // 7 方法将数组的所有元素连接到一个字符串中。
// join()
// var arr=[1,5,6,2,8];
// console.log(arr);
// // 清空数组的3种方法
// // arr=[];
// // console.log(arr);
// // arr.length=0;
// // console.log(arr);
// //第一个参数,是从什么位置开始删除(索引)
// //第二个参数,是删除多少个元素
// arr.splice(0,arr.length);
// console.log(arr);
</script>
</head>
<body>
</body>
</html>
- 清空数组
// 方式1 推荐
arr = [];
// 方式2
arr.length = 0;
// 方式3
arr.splice(0, arr.length);
案例
- 将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
function myJoin(array, seperator) {
seperator = seperator || ',';
array = array || [];
if (array.length == 0){
return '';
}
var str = array[0];
for (var i = 1; i < array.length; i++) {
str += seperator + array[i];
}
return str;
}
var array = [6, 3, 5, 6, 7, 8, 0];
console.log(myJoin(array, '-'));
console.log(array.join('-'))
- 将一个字符串数组的元素的顺序进行反转。["a", "b", "c", "d"] -> [ "d","c","b","a"]。使用两种种方式实现。提示:第i个和第length-i-1个进行交换
function myReverse(arr) {
if (!arr || arr.length == 0) {
return [];
}
for (var i = 0; i < arr.length / 2; i++) {
var tmp = arr[i];
arr[i] = arr[this.length - i - 1];
arr[arr.length - i - 1] = tmp;
}
return arr;
}
var array = ['a', 'b', 'c'];
console.log(myReverse(array));
console.log(array.reverse());
- 工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
// 方式1
var array = [1500,1200,2000,2100,1800];
var tmpArray = [];
for (var i = 0; i < array.length; i++) {
if(array[i] < 2000) {
tmpArray.push(array[i]);
}
}
console.log(tmpArray);
// 方式2
var array = [1500, 1200, 2000, 2100, 1800];
array = array.filter(function (item, index) {
if (item < 2000) {
return true;
}
return false;
});
console.log(array);
- ["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置
var array = ['c', 'a', 'z', 'a', 'x', 'a'];
do {
var index = array.indexOf('a',index + 1);
if (index != -1){
console.log(index);
}
} while (index > 0);
- 编写一个方法去掉一个数组的重复元素
var array = ['c', 'a', 'z', 'a', 'x', 'a'];
function clear() {
var o = {};
for (var i = 0; i < array.length; i++) {
var item = array[i];
if (o[item]) {
o[item]++;
}else{
o[item] = 1;
}
}
var tmpArray = [];
for(var key in o) {
if (o[key] == 1) {
tmpArray.push(key);
}else{
if(tmpArray.indexOf(key) == -1){
tmpArray.push(key);
}
}
}
returm tmpArray;
}
console.log(clear(array));
基本包装类型
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean
// 下面代码的问题?
// s1是基本类型,基本类型是没有方法的
var s1 = 'zhangsan';
var s2 = s1.substring(5);
// 当调用s1.substring(5)的时候,先把s1包装成String类型的临时对象,再调用substring方法,最后销毁临时对象, 相当于:
var s1 = new String('zhangsan');
var s2 = s1.substring(5);
s1 = null;
// 创建基本包装类型的对象
var num = 18; //数值,基本类型
var num = Number('18'); //类型转换
var num = new Number(18); //基本包装类型,对象
// Number和Boolean基本包装类型基本不用,使用的话可能会引起歧义。例如:
var b1 = new Boolean(false);
var b2 = b1 && true; // 结果是什么
String对象
- 字符串的不可变
var str = 'abc';
str = 'hello';
// 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
- 创建字符串对象
var str = new String('Hello World');
// 获取字符串中字符的个数
console.log(str.length);
- 字符串对象的常用方法
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
// 1 字符方法
charAt() //获取指定位置处字符
charCodeAt() //获取指定位置处字符的ASCII码
str[0] //HTML5,IE8+支持 和charAt()等效
// 2 字符串操作方法
concat() //拼接字符串,等效于+,+更常用
slice() //从start位置开始,截取到end位置,end取不到
substring() //从start位置开始,截取到end位置,end取不到
substr() //从start位置开始,截取length个字符
// 3 位置方法
indexOf() //返回指定内容在元字符串中的位置
lastIndexOf() //从后往前找,只找第一个匹配的
// 4 去除空白
trim() //只能去除字符串前后的空白
// 5 大小写转换方法
to(Locale)UpperCase() //转换大写
to(Locale)LowerCase() //转换小写
// 6 其它
search()
replace()
split()
fromCharCode()
// String.fromCharCode(101, 102, 103); //把ASCII码转换成字符串
案例
- 截取字符串"我爱中华人民共和国",中的"中华"
var s = "我爱中华人民共和国";
s = s.substr(2,2);
console.log(s);
- "abcoefoxyozzopp"查找字符串中所有o出现的位置
var s = 'abcoefoxyozzopp';
var array = [];
do {
var index = s.indexOf('o', index + 1);
if (index != -1) {
array.push(index);
}
} while (index > -1);
console.log(array);
- 把字符串中所有的o替换成!
var s = 'abcoefoxyozzopp';
do {
s = s.replace('o', '');
} while (s.indexOf('o') > -1);
console.log(s);
console.log(s.replace(/o/ig, ''));
- 判断一个字符串中出现次数最多的字符,统计这个次数
网友评论