数组
一.定义
1. var arr = [];
2. var arr = new Array();
二、方法
1. 改变原数组
- push() 数组末尾添加
// 手写push()方法
var arr = ['a', 'b'];
Array.prototype.push = function(){
for(var i = 0; i< arguments.length; i++){
this[this.length] = arguments[i]
}
return this.length;
}
- pop() 删除
- unshift() 数组从 0 位开始添加
- shift() 从 0 位开始删除
- reverse() 数组翻转
- splice() 切片
splice(第几位开始[, 截取长度[, 替换的值]])
var arr = [1,2,3,4,5];
arr.splice(2,-1,'aa','bb', 'cc') // [1, 2, 'aa', 'bb', 'cc', 3, 4, 5]
- sort() 排序
// sort 内部可以function自定义排序规则
// 1. 返回正数,后面的数靠前
// 2. 返回负数, 前面的数靠前
// 3. 返回0, 不变
var arr = [1,3,2,6,4];
arr.sort(function(a,b){
return a - b; // 正序
return b - a; // 倒序
// if(a<b){
// return 1;
// }else{
// return -1;
// }
})
练习
// 数组打乱乱序
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
Array.prototype.so = function () {
this.sort(function (a, b) {
return Math.random() - 0.5
})
return this;
}
arr.so()
2. 不改变原数组
- concat() 连接数组
var arr = [1,2,3];
var arr1 = [4,5,6];
arr.concat(arr1)
- slice() 截取数组
slice(截取的起始位置[,截取到第几位])
var arr = [1,2,3,4,5,6]
arr.slice(2,3)
- join() 数组转字符串
- split() 字符串转数组
- toString
var arr = [1,2,3,4]
arr.toString();
三、类数组
- 拥有
length
属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理); - 不具有数组所具有的方法
var obj = {
'1': 'a',
'2': 'b',
'length': 2,
'push': Array.prototype.push,
'splice': Array.prototype.splice // 加上splice返回数组格式
}
Array.prototype.push = function(){
for(var i = 0; i < arguments.length; i++){
obj[obj.length] = arguments[i]
}
return obj.length
}
四、数组去重
// 数组去重 无法区分字符串和number
var arr = [1, 2, '2', 3, 4, 5, 5, 4];
// hash 方法
Array.prototype.unique = function () {
var obj = {},
arr = [];
for (var i = 0; i < this.length; i++) {
if (!obj[this[i]]) {
obj[this[i]] = this[i];
arr.push(this[i]);
}
}
return arr;
}
arr.unique()