数组
声明
var arr1 = []; //数组字面量
var arr2 = new Array(); //不推荐
var arr3 = Array();//不使用 通过系统内置的Array构造函数声明
稀松数组
var arr = [,1,,,2,3,];
console.log(arr.length);//6 最后一个不算
在原数组上做修改的数组方法
pop、push、
var arr = [2,3,4];
arr.pop();
console.log(arr);//2,3 删除末尾 返回删除的那一项
var arr = [2,3,4];
arr.push(5);
console.log(arr);//2,3,4,5 在末尾添加 返回新的数组长度
末尾添加还可以使用length
var arr = ['rose','jack','mary'];
arr[arr.length] = 'king';
console.log(arr); //["rose", "jack", "mary", "king"]
push的底层实现
var arr = [4,5,6];
Array.prototype.myPush = function() {
for(var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i]; //arguments包含实参列表
}
return this.length;
}
arr.myPush(1,2,3);
console.log(arr); //4, 5, 6, 1, 2, 3
shift、unshift
var arr = [2,3,4];
arr.shift();
console.log(arr);//3,4 删除开头 返回删除的那一项
var arr = [2,3,4];
arr.unshift(1);
console.log(arr);//1,2,3,4 开头添加 返回新的数组长度
reverse
splice
//删除并添加
//arr.splice(开始项的下标 包含自己,剪切长度,剪切以后最后一位开始添加数据)
var arr = ['a','b','c'];
arr.splice(1,1,3,4,5); //'a' 3,4,5,'c'
//中间添加
//eg:想要在c后添加d
//方法一:
var arr = ["a", "b", "c","e"];
arr.splice(3,0,'d');//因为开始项包含本身 所以到下一项
//方法二:
var arr = ["a", "b", "c","e"];
arr.splice(-1,0,'d');
下标是如何寻找的?
var arr = ["a", "b", "c","e"];
function splice(arr,index) {
return index += index >= 0 ? 0 : arr.length ;
}
console.log(arr[splice(arr,-1)]); //e
//如果是正值index就不改变 负值就加长度-1+4=3
sort
按照ascII码来排列
var arr = [27,49,5,7];
arr.sort(function(a,b) {
return a - b; //升序
return b - a;//降序
})
随机排序
var arr = [1,2,3,4,5,6];
//Math.random() -> 0~1 开区间 大于0.5 小于等于0.5
arr.sort(function(a,b) {
var rand = Math.random();
if(rand -0.5 > 0) {
return 1; //正数
}else {
return -1;
}
return Math.random() - 0.5;
})
console.log(arr);
eg:根据对象里的年龄按照升序排序
var person = [
{
name:'rose',
age:13
},
{
name:'jack',
age:23
},
{
name:'mary',
age:20
},
{
name:'john',
age:8
},
]
person.sort(function(a,b) {
if(a.age > b.age) {
return 1;
}else {
return -1;
}
})
console.log(person);
eg:按照字符串的长度排序
var str = ['123','1','1234','12'];
str.sort((a,b) => {
if(a.length > b.length) {
return 1;
}else {
return -1;
}
})
console.log(str);//["1", "12", "123", "1234"]
practice:
- 用splice重写数组的原型上的unshift方法
- 按照字节数排序下列数组[‘我爱你’,‘OK’,‘Hello’,‘你说WHAT’,‘可以’];
concat
合并数组
slice
参数:[start]包含本身被截取、[end]结束的下标
也就是 [start,end)
一个参数:slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。
var arr = ['rose','jack','mary'];
console.log(arr.slice(1)); //["jack", "mary"]
两个参数:该方法返回起始和结束位置之间的项(但不包括结束位置的项)。
var arr1 = [1,2,3,4];
var arr2 = arr1.slice(0,2);
console.log(arr2); // 1,2