(一)、数组基础
1、声明数组方法:
(1)、数组字面量
var arr1 = [];
(2)、构造函数
通过系统内置的Array构造函数声明数组 不推荐
var arr2 = new Array();
(3)、这是声明数组的第三种方法,知道就行,不使用
var arr3 = Array();
所有数组都继承于Array.prototype,Array.prototype下所有的方法数组都可以继承来使用
console.log(arr1.__prpto__);
console.log(arr2.__prpto__);
console.log(arr3.__prpto__);
console.log(Array.prototype);
2、对象的三种声明方式:
//对象
var obj1 = {}; //对象字面量
var obj2 = new Object();//通过系统内置的Object构造函数声明对象
var obj3 = Object();
console.log(Object.prototype);
//所有的对象都继承于Object.prototype,
//Object.prototype下所有的方法乃至属性,对象都是可以使用的
数组到底是什么?
在JavaScript中,数组的底层机制就是继承对象而来的。
在JavaScript中,数组其实就是对象的一种形式,只是写法不同,但是它们的访问机制是一模一样的
用对象模拟数组
var arr = [1,2,3,4,5];
var obj = {
0:1,
1:2,
2:3,
3:4,
4:5
}
console.log(arr[2]);
console.log(obj[2]);
// --------------------------
var obj1 = {
name: 'a'
}
//底层机制: obj1.name -> obj1['name']
3、稀松数组
var arr = [,,];
console.log(arr);
最后面打了逗号根没打一样
var arr = [,1,3,5,7,];
console.log(arr.length); // 5
var arr = [,1,3,,,5,7,]; //稀松数组
var arr1 = new Array(1,3,5,7);//用系统内置构造函数构造出来的数组,不能有空值,有空值会报错
//必须每一位都有值才可以
var arr2 = new Array(5); //[,,,,,] 最后一个逗号必须打,否则前面的逗号就会被忽略
//注意:这不是空数组,这个数组里面是有元素的,只不过每个元素都是空
console.log(arr2.length);
var arr = new Array(5.2); //报错 Invalid array length非法的数组长度
var arr = new Array(a);
console.log(arr.length); // 报错 a is not defined
var arr = new Array('a');
console.log(arr.length); //1
console.log(arr); // ["a"]
再次证明数组是对象的另一种形式
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(arr[10]); //undefined
var obj = {
0: 1,
1: 2,
2: 3,
3: 4,
4: 5,
5: 6,
6: 7,
7: 8,
8: 9,
9: 10
}
console.log(obj[10]); //undefined
4、添加修改数组元素
var arr = [1,2,3,4,5,6,7,8,9,10];
arr[10] = 'a';
arr[5] = 'b';
console.log(arr);
(二)、数组方法
1、push/unshift
push在数组的最后一位添加元素
unshift在数组的最前面添加元素
push和unshift的返回值,都是执行了方法以后的数组长度
可以一次添加多个元素
var arr = [2, 3, 4];
arr.push(5, 6, 7);
arr.unshift(1, 'a', 'b');
console.log(arr);
2、myPush
function test(){
console.log(arguments);
}
test(1,2,3);
var arr = [2, 3, 4];
Array.prototype.myPush = function(){
for(var i = 0; i < arguments.length; i++){
this[this.length] = arguments[i];
}
return this.length;
}
arr.myPush(1, 2, 3);
console.log(arr);
3、pop/shift
pop每次会把数组的最后一个元素剪切掉,返回被剪切掉的元素
shift每次会把数组的第一个元素剪切掉,返回被剪切掉的元素
var arr = ['a', 'b', 'c'];
arr.pop(); //注意,这里不传参数,也不能传参数 就是剪切数组的最后一位,执行一次剪切一次
arr.shift();//剪切第一位 也没有参数
//可以找到我现在剪切是哪一位的数据
var arr = ['a','b','c'];
var str = arr.shift();
console.log(str);
//往往是从后端获取的数据赋值给arr,这个时候根本就不知道里面装的是什么
4、reverse
倒序
var arr = ['a', 'b', 'c'];
arr.reverse();
console.log(arr);
5、splice
arr.splice(开始项的下标,剪切长度,新增的数据)
var arr = ['a', 'b', 'c'];
arr.splice(1,2);
console.log(arr); // ['a']
var arr = ['a', 'b', 'c', 'e'];
arr.splice(3,0,'d')
console.log(arr); // ['a', 'b', 'c', 'd', 'e']
var arr = ['a', 'b', 'c', 'e'];
arr.splice(-1,0,'d')
console.log(arr); // ['a', 'b', 'c', 'd', 'e']
var arr = ['a', 'b', 'c', 'e'];
function splice(arr,index){
return index += index >= 0 ? 0 :arr.length;
}
console.log(splice(arr, -1)) // 3 返回的是下标
console.log(arr[splice(arr,0)]);
(三)、数组排序
sort()
返回的是排序以后的数组
数组排序是数组里最牛的方法,只要考数组,这个必考
var arr = [-1, -5, 8, 0, 2];
arr.sort();
console.log(arr); //[-1, -5, 0, 2, 8]
var arr = ['b', 'z', 'h', 'i', 'a'];
arr.sort();
console.log(arr);//["a", "b", "h", "i", "z"];
console.log(arr.sort());//["a", "b", "h", "i", "z"];
//记住:sort()函数返回结果是什么?返回的是排序以后的数组
sort是按照ASCII码来排序的
var arr = [27, 49, 5, 7];
arr.sort();
console.log(arr); //[27, 49, 5, 7]
sort()括号中的函数自己去定义要排序的方法
这个方法有要求:
1、必须有两个参数
2、必须有返回值。
返回值有要求。
如果是负值 a就排在前面,如果是正值,b排在前面,如果是0,保持不动
这在编程里统一的叫冒泡排序法
arr.sort(function(a,b){
return a - b;
});
var arr = [27, 49, 5, 7];
arr.sort(function(a,b){
if(a > b){
return 1;
}else{
return -1;
}
});
console.log(arr); //[5, 7, 27, 49]
1、笔试题
Math.random();
返回介于 0(包含) ~ 1(不包含) 之间的一个随机数:
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(a,b){
var rand = Math.random();
if(rand - 0.5 > 0){
return 1;
}else{
return -1;
}
});
console.log(arr);
2、按照年龄生序
var arr = [
{
son: 'Jenny',
age: 18
},
{
son: 'Jone',
age: 10
},
{
son: 'Ben',
age: 16
},
{
son: 'Crytal',
age: 3
},
{
son: 'Lucy',
age: 11
}
];
arr.sort(function(a,b){
if(a.age > b.age){
return 1;
}else{
return -1;
}
});
console.log(arr);
3、按字符串长度生序
var arr = ['12345', '1', '1234', '12', '1234567'];
arr.sort(function(a,b){
if(a.length > b.length){
return 1;
}else{
return -1;
}
});
console.log(arr);