目录
1.数组定义
//数组定义
var arr1 = [, ];
var arr2 = new Array(); //系统提供构造方法
//数组所有方法来自 Array.prototype
var arr = new Array(10);
console.log(arr.length);//打印10
var arr1 = [, ];
console.log(arr1.length + ": " + arr1[0]); //打印1 : undefined
var arr2 = [1, , 1];
console.log(arr2.length + ": " + arr2[0] + " " + arr2[1] + " " + arr2[2]);
//打印3: 1 undefined 1
//数组的读和写
var arr = [10];
console.log(arr[1]);//读溢出,打印undefined
2.数组常用方法
2.1改变原数组
push添加
var arr = new Array();
arr.push(10);
arr.push(11);
arr.push(5,4,3,2,1);
console.log(arr);//打印10 11 5 4 3 2 1
pop弹出数组最后一位
var arr = [1, 2, 3];
console.log(arr.pop()); //打印3
console.log(arr); //打印1 2
shift 和 unshift
shift是弹出数组第0位
var arr = [1,2,3];
console.log(arr.shift());//打印1
console.log(arr);//打印2 3
unshift 是在最前面加数字
var arr = [1,2,3];
arr.unshift(0);
arr.unshift(-2,-1);
console.log(arr);//打印-2 -1 0 1 2 3
reverse改变原数组顺序,反过来
var arr = [1,2,3];
console.log(arr);//打印1 2 3
arr.reverse();
console.log(arr);//打印3 2 1
splice
方法的参数:splice(第几位开始,截取多少长度,在切口处添加新的数据)
前两参数是必须的;
var arr = [1,1,2,2,3,3];
console.log(arr.splice(0,2));//打印1 1
console.log(arr);//打印2 2 3 3
//1
var arr = [1,1,2,2,3,3];
arr.splice(0,2,10,11);
console.log(arr);//打印10 11 2 2 3 3
//2
var arr2 = [1,1,2,2,3,3];
arr2.splice(1,2,10,11);
console.log(arr2);//打印1 10 11 2 3 3
若负数位的情况:
var arr = [1,1,2,2,3,3];
console.log(arr.splice(-1,1,10,11));//打印3,这里的 -1 表示倒数第一位
console.log(arr);//打印10 11 2 2 3 3
sort
类似stl的sort,进行排序,默认按照ASCII码排序的
var arr = [5,9,1,-2,3,0];
arr.sort();
console.log(arr);//打印-2, 0, 1, 3, 5, 9
var arr = [1,3,5,4,10];
arr.sort();
console.log(arr);//打印1,10,3,4,5,实际是按照ASCII码排序的
同样也可以加比较器进行按照自定义排序
var arr = [1, 3, 5, 4, 10];
//1.function必须写两个形参
//2.当返回值负数,前面的数放前面
//3.当正数,后面的数放前面
arr.sort(function(a, b) {
//return (a < b) ? -1 : 1;
return a - b;//升序
});
console.log(arr); //打印[1, 3, 4, 5, 10]
2.2不改变原数组
concat 连接数组,返回新的数组
var arr1 = [1, 2, 3];
var arr2 = [7, 8, 9];
var arr3 = arr1.concat(arr2);
//不改变原数组
console.log(arr1); //1 2 3
console.log(arr2); //7 8 9
console.log(arr3); //1 2 3 7 8 9
slice
slice(从该位开始截取,截取到该位);
第一个参数必须添加
var arr = [1, 2, 3];
var arr2 = arr.slice(0, 1); //从0位开始,截取到第1位
console.log(arr2); //打印 1
var arr3 = arr.slice(0, 2); //从0位开始,截取到第2位
console.log(arr3); //打印1 2
var arr4 = arr.slice(1); //从第1位开始全部截取
console.log(arr4); //打印 2 3
var arr5 = arr.slice(-2);//从倒数第二开始全部截取,倒数第二为2
console.log(arr5);//打印 2 3
join 和 split
var arr = [1, 2, 3];
var s = arr.join("!");
console.log(s); //返回字符串1!2!3,用 ! 连接
//如果直接 arr.join();那么会以逗号 ',' 连接
//split,为逆过程
var arr2 = s.split("!");
console.log(arr2); //打印["1", "2", "3"]
var arr3 = s.split("2");
console.log(arr3); //打印["1!", "!3"]
关于这两个的应用
var str = 'acd';
var str1 = 'ggg';
var str2 = 'jhjj';
var str3 = 'ddd';
var arr = [str, str1, str2, str3];
console.log(arr.join());
3.类数组
既可以像数组一样用,又可以像类一样用
//必须写 length 属性
var obj = {
"0": "a",
"1": "b",
"2": "c",
"length": 3,
"push": Array.prototype.push,
"splice": Array.prototype.splice
}
console.log(obj);
obj.push("d");
console.log(obj.length); //打印4,模仿出了Array的功能
/*
对于 push 底层方法如下:
Array.prototype.push = function(target){
obj[obj,length] = target;
obj.length++;
}
由于找到了我们自己定义的 length ,所以加 1
*/
关于类数组习题练习
var obj = {
"2": "a",
"3": "b",
"length": 2,
"push": Array.prototype.push,
"splice": Array.prototype.splice
}
obj.push('c');
obj.push('d');
//问题:obj对象此时变成了什么?
/*答:可以看push底层方法,加入 'c',执行obj[2] = 'c',length = 3;
同理,加入 'd',obj[3] = 'd',length = 4;
所以:
obj = {
"2":"c",
"3":"d",
"length":4,
"push":Array.prototype.push,
"splice":Array.prototype.splice
}
*/