数组常用方法
1. 改变原数组
- push(尾部添加)、pop(尾部移除)、unshift(首部增加)、shift(首部移除), sort(ascii排序),reverse(数据逆转)
- splice
2. 不改变原数组
- concat(连接2个数组),slice, join -> split, toString, slice
数组push:
var arr = []
Array.prototype.push = function() { // 模拟系统的push实现
//this :当前实例
for(var i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i]
}
return this.length;
}
arr.push(1,2,3)
数组unshift:
var arr = []
Array.prototype.unshift= function() { // 模拟系统的unshift实现
//this :当前实例
var ary = [...arguments, ...this];
this.length = ary.length;
for(var i=0;i<ary.length;i++){
this[i]=ary[i];
}
return ary.length;
}
arr.unshift(1,2,3)
数组pop:
var arr = [2,3,4,5]
Array.prototype.pop= function() { // 模拟系统的pop实现
//this :当前实例
var num=this[this.length-1];
this.length--;
return num;
}
arr.pop()
数组shift:
var arr = [2,3,4,5]
Array.prototype.shift= function() { // 模拟系统的shift实现
//this :当前实例
var num=this[0];
for(var i=1;i<this.length;i++){
this[i-1]=this[i];
}
this.length--;
return num;
}
arr.shift()
数组splice用法:
var arr = [1,2,3,4,56,7]
// arr.splice(从第几位开始, 截取多少长度,在切口处添加新的数据)
// 新数据可添加多个;
// splice = function(pos) {// 起始位置可以是负数
// pos += pos > 0? 0 : this.length; // pos >=0
// }
数组sort用法:
语法:arrayObject.sort(sortby); // 参数sortby 可选,用来规定排序的顺序,但必须是函数
var arr = [1, 3, 5, 10, 7, 9] // 如果用sort排序,则比较的是字符的ascii码
// 自定义排序
// 1. 必须写两个形参
// 2. 看返回值 1) 当返回值为负数时, 那么前面的数放在前面
// 2) 当返回值为正数时,那么后面的数在前
// 3) 当返回值为0,不动
arr.sort(function(a, b) {
return a - b; // 升序
// return b-a // 降序
})
例1:给一个有序数组,乱序
var arr =[1,2,3,4,5,6,7,8,9]
arr.sort(function() {
return Math.random()-0.5;
})
例2:对象属性排序
var a = {
name: 'aaa',
age: 11
}
var b = {
name: 'bbb',
age: 13
}
var arr = [a, b]
arr.sort(function(a,b) {
return a.age-b.age;
})
数组concat:// concat不改变原数组
var aa = [1,2,3,4], bb= [5,6,7,8]
aa.concat(bb)
数组slice用法:
var arr = [1,2,3,4,5,6,7]
// slice (从该位开始截取,截取到该位)
// slice (从该位开始截取) // 截取到最后一位
// slice () // 全部截取 如:把类数组转化为数组
var newArr = arr.slice(1, 3)
数组join <==> 字符串的 str.split (互逆)
使用案例:
如何在Array原型上扩展一个去重方法?
利用对象属性不重复
Array.prototype.unique = function() {
var temp = {}, arr = [], len = this.length;
for (var i = 0; i < len; i++) {
if(!temp[this[i]]) {
temp[this[i]] = true; // 赋一个真值
arr.push(this[i]);
}
}
return arr;
}
var d = [1,2,1,1,1,2,3,4,5,6,6,5,4,8];
d.unique(); // 打印结果: [1, 2, 3, 4, 5, 6, 8]