# 数组
## 数组是一组数据的集合,可以将更多的数据存储在单个变量下。微信小程序中的数组定义和PHP语言类似
## **1.数组的定义**
在微信小程序中可以使用两种方式进行数组的定义
```
// 数组的定义方法1
var lsit =new Array();
lsit[0] = "微信小程序";
lsit[1] = "Html";
// 数组的定义方法2
var lsit = [ "微信小程序", "Html"];
```
## **2.获取数组的元素**
```
console.log(lsit[0]);
```
## **3.数组的求和**
```
var sum = [1,2,3]
var sum2 = 0;
for(var i=0;i<sum.length;i++){
sum2+=sum[i];
}
console.log(sum2)
```
## **4.获取数组元素的最大值**
```
var arr = [12,65,34,89,45];
var num = arr[0];
for(var i=1;i<arr.length;i++) {
if(num<arr[i]) {
num=arr[i];
}
}
console.log(num);
```
## **5.数组添加元素**
给数组添加函数使用push()函数
```
var lsit = [
{ name:"张三",number:2001},
{ name:"李四",number:2002},
{ name:"王五",number:2003},
{ name:"周六",number:2004},
{ name:"吴七",number:2005},
]
lsit.push({name:"刘八",number:2003})
```
## **6.判断一个对象是不是数组**
判断一个对象是不是数组的两种方式
* 1. 通过instanceof Array
* 2. 通过Array.isArray()方法
```
var arr = new Array()
console.log(arr instanceof Array); //true
console.log(Array.isArray(arr)); //true
```
## **7.添加和删除数组元素**
* **push()** 方法在数组的末尾添加一个或多个元素
* **unshift()** 方法在数组的开头添加一个或多个元素
* **pop()** 方法删除数组尾部的元素,一次只能删除一个
* **shift()** 删除数组最前面的元素
```
//添加和删除数组元素
var arr = [
{ title:"新闻标题1",desc:"新闻描述1"},
{ title:"新闻标题2",desc:"新闻描述2"},
];
arr.push(
{ title:"新闻标题3",desc:"新闻描述3"},
{ title:"新闻标题4",desc:"新闻描述4"}
);
arr.unshift(
{ title:"新闻标题",desc:"新闻描述"},
{ title:"新闻标题0",desc:"新闻描述0"},
);
arr.pop();
arr.shift();
```
```
//筛选出不及格的分数
var arr = [20,59,40,80,99,98];
var newArr = [];
for(var i=0;i<arr.length;i++) {
if(arr\[i] <60) {
continue
}
newArr.push(arr\[i\]);
}
console.log(newArr)
```
## **8.reverse方法翻转数组**
reverse()方法将数组中的元素位置颠倒,并返回一个**新的**数组。
```
var arr = [20,59,40,80,99,98];
console.log(arr.reverse()) // [98, 99, 80, 40, 59, 20]
```
## **9.sort方法对数组进行排序**
**sort()**方法用[原地算法](https://en.wikipedia.org/wiki/In-place_algorithm)对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为 **字符串**,然后比较它们的UTF-16代码单元值序列时构建的,所有当使用sort()进行排序存在问题
```
var arr = [20,59,40,80,99,98,6];
arr.sort()
console.log(36>6) //true
console.log('36'>'6')//false
console.log(arr) //[20, 40, 59, 6, 80, 98, 99]
```
在上面的实例中为什么会出现6排在59和80之间呢?因为sort默认排序是将元素转换为字符串,然后对字符串进行比较,再排序的。而字符串的比较规则会根据第一个不同的字符的ascii值码进行比;所有需要使用下面的固定写法
```
//添加和删除数组元素
var arr = [20,59,40,80,99,98,6];
//按照升序排列
arr.sort(function(a,b){
return a - b
})
//按照降序排列
arr.sort(function(a,b){
return b - a
})
```
## **10.数组去重**
数组的索引:indexOf()方法,返回在数组可以找到一个给定元素的第一个索引,如果不存在返回 -1
lastIndexOf()返回指定元素在数组中的最后一个索引,如果不存在则返回 -1
```
//数组去重
var arr = [2,9,6,2,6,5];
var newArr = newArray();
for(var i=0; i<arr.length; i++) {
if(newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i])
}
}
console.log(newArr) //[2, 9, 6, 5]
```
## **11.把数组转换为字符串**
* toString()将数组通过逗号连接成一个字符串
* join(分隔符) 将数组通过分隔符连接成一个字符串。没有参数则默认是逗号
```
var arr = [2,9,6,2,6,5];
console.log(arr.toString());//=>2,9,6,2,6,5
console.log(arr.join('-')); //=>2-9-6-2-6-5
```
## **12.数组的其他常用方法**
* concat() 用于合并两个或多个数组,该方法不会更改现有数组,而是返回一个新的数组
* slice()截取数组的一部分返回一个新数组对象,这一对象是由begin和end决定的原数组的浅拷贝(包括begin不包括end)。原数组不会被改变
* splice()通过删除或者替换现有元素或者原地添加新元素来修改或删除数组splice(从第几个开始,删除几个)
```
var arr = [1,2,3,4,5];
arr.splice(0,2) //从索引为0的地方开始,删除2个元素
console.log(arr) //[3, 4, 5]
```
```
var arr = ['a','b','c','d','e'];
arr.splice(0,2,"A","B") //从索引为0的地方开始,替换2个元素
console.log(arr) //["A", "B", "c", "d", "e"]
```