# 數組
## 數組是一組數據的集合,可以將更多的數據存儲在單個變量下。微信小程序中的數組定義和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"]
```