创建数组的三种模式
- var arr = new Array();不推荐
- var arr =[];
- var arr=Array();不推荐 ```javascript var arr = []; var arr1 = new Array();//不推荐 var arr2 = Array();//不推荐
var obj = {};//更加直观 var obj = new Object()//不推荐
console.log(arr.proto,arr1.proto,arr2.__proto);//所有数组都继承于Array.prototype
<a name="BsXlf"></a>
## Array
1. new Array();
1. new Array(num) num 是数组的长度。num要是Number类型就是数组长度,否则就是数组元素
1. [,,,,,1,,,,]稀松数组。
```javascript
var arr = new Array(2);//[empty * 2];
var arr = new Array(2.2)//RangeError: Invalid array length
var arr = new Array('a')//['a'];
var arr = new Array(1,2,3,,4);//报错 Unexpected token ','
所有数组都继承于Array.prototype.
- 数组底层的机制就是继承于Object
数组的访问机制都是Object;
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(array[10])//undefined 类似于obj[10]
/**
* 解释 var obj = {
* 0:1,
* 1:2,
* ....,
* 9:10
* }
*
/
var arr = [, ,];
arr = [, 1, 2, 3, 4, 5,];//稀松数组
原数组上修改
push
- unshift
- pop
- shift
- reverse
- splice
- sort
push ,unshift
-
push
在数组最后一位添加元素(复数)。 ```javascript var arr = [1, 2, 3, 4, 5]; console.log(arr.push(6,7,8));//8 返回的是数组的长度。arr=[1,2,3,4,5,6,7,8,9,10]; arr.unshift(-2,-1,0);//8 返回的是数组长度。arr =[-2,-1,0];
Array.prototype.myPush = function(){ for(var i = 0;i<arguments.length; i++){ const element = arguments[i]; this[this.length] = element; } return this.length; }
<a name="jKTjQ"></a>
### unshift
- 在数组第一位添加元素
```javascript
var arr = [1, 2, 3];
arr.unshift(4,5,6);//arr [4, 5, 6, 1, 2, 3];
pop 、shift
pop
-
shift
会剪切掉第一位,并且返回被剪切的这一位。 ```javascript var arr = [1, 2, 3]; console.log(arr.shift());//1 console.log(arr);//[2, 3]
var brr = [1, 2, 3]; console.log(brr.pop())//3 console.log(brr)//[1, 2]
<a name="L7P48"></a>
## reverse
- 反转。返回的是反转之后的数组。
```javascript
var arr = [1, 2, 3];
var brr = arr.reverse();
console.log(brr) //[3, 2, 1];
brr==arr//true
splice
- splice(p1,p2,p3,p4,….) 参数1:开始的下标 参数2:剪切长度.参数3 剪切以后最后一位开始添加数据。
开始的下标,剪切长度,剪切以后最后一位开始添加数据
var arr = [1, 2, 3, 4, 5]
// 0, 1, 2, 3, 4
// -5,-4,-3,-2,-1
//当开始位置是正值的时候
var arr = [1, 2, 3, 4, 5];
arr.splice(1,2);//数组下标第一位开始,删除两位。
console.log(arr);//[1, 4, 5];
//开始位置是复值的时候
var arr = [1, 2, 3, 4, 5];
arr.splice(-1,1,6,7,8);//[5]
console.log(arr);//[1, 2, 3, 4, 6, 7, 8]
var arr = [1,2,3,4,5];
function splice(arr,index){
return index+= index>=0?0:arr.length;
}
splice(arr,6)
sort排序
返回排序后的数组、
var arr = [9, 4, 6, 0, 3, -2];
console.log(arr.sort());//[-2,0,3,4,6,9];
var arr =['r','v','g','s','t']
console.log(arr.sort())//["g", "r", "s", "t", "v"]
sort 的排序是根据ASCII码进行排序的。
var arr = [29, 30, 25, 20, 6, 9];
console.log(arr.sort());//[ 20, 25, 29, 30, 6, 9 ]
自定义排序 arr.sort(function(a,b){});
- 解决sort 根据ASCII码来排序。
- 必须接收两个参数a,b
- 必须有返回值
- 返回值的情况
- 负值 a排前面。
- 正值 b排前面
- 0 保持不变。
var arr = [27, 49, 5, 7];
arr.sort(function(a,b){
if(a>b){
return 1
}else{
return -1;
}
})
作业
使用splice方法重写unshift 方法。
```javascript // 用splice的方法来重写数组原型上的unshift方法; Array.prototype.myUnshift = function(){ console.log(arguments);//是一个伪数组 for (let index = arguments.length-1; index >=0; index—) { this.splice(0,0,arguments[index]);//在第一位删除0位置,然后添加数据。 } return this.length; }
- 返回值的情况
var a=[1,2,3,4,5]; a.myUnshift(6,7,8,9);
<a name="BLCcE"></a>
### 按照字节大小来排序下面数组
```javascript
var a =['哈哈哈','OK','hello','motor'];
function getBytes(str){
var size = str.length;//先赋值为字符串长度,如果遇到UNICODE大于255的就加1
for (let index = 0; index < str.length; index++) {
if(str.charCodeAt(index)>255){
size++;
}
}
return size;
}
console.log( getBytes('哈哈哈'))
a.sort(function(a,b){
//两个参数 a,b 如果返回正值就b在a前面。返回负值就b在a后面。
var x = getBytes(a)-getBytes(b);
return x>0?-1:1
})
//["哈哈哈", "hello", "motor", "OK"] 6 5 5 2
- 解决sort 根据ASCII码来排序。