2016-09-03于坝上草原
Array类型
* 创建数组
```
var color = new Array();
var color = new Array(3);
var color = new Array('red', 'green');
var color = Array(3);
var color = Array('red', 'green');
var color = ['red', 'green'];
```
* .length属性
length属性不是只读的,通过length属性,可以从数组的末尾移除项或向数组中添加新项。
```
var color = ['red', 'green'];
color.length = 0; // 清空数组
console.log(color); // 结果 []
```
* 检测是否是数组
```
var arr = ['arr1', 'arr2'];
Array.isArray(arr); // 检测数组
// 结果
true
```
转换方法
* .toLocaleString()
* .toString(): 返回数组中的每个值的字符串形式拼接成一个以逗号分割的字符串
* .valueOf(): 返回数组
* .join(): 接收一个作为分隔符的字符串,返回数组中的元素组成的字符串,每个元素间以分隔符作为分隔
toLocaleString()和toString()为了取得每一项值,调用数组每一项元素的toLocaleString()和toString()方法
```
var color1 = {
toLocaleString: function() {
return 'red';
},
toString: function() {
return 'RED'
}
}
var color2 = {
toLocaleString: function() {
return 'green';
},
toString: function() {
return 'GREEN';
}
}
var colors = [color1, color2];
console.log(colors.toLocaleString());
console.log(colors.toString());
// 结果
red,green
RED,GREEN
```
栈方法(LIFO)
LIFO:last in first out
* .push(): 接收任意数量的参数,逐个添加至数组末尾,并返回修改后数组的长度
* .pop(): 从数组末尾移除最后一项,减少数组length的长度
队列方法(FIFO)
FIFO:first in first out
* .shift(): 移除数组中的第一项并返回该项,数组长度减一
* .unshift(): 在数组前端添加任意个项,并返回新数组长度
重排序方法
* .reverse(): 翻转数组项的顺序
* .sort(): 按升序排序数组项
sort()方法会调用每个数组项的toString()转型方法,即使每一项的是数值,比较的也是字符串
.sort()可接受一个作为比较函数的参数
```
function compare(value1, value2) { // 比较函数
if (value1 > value2) {
return 1;
}else if (value1 < value2) {
return -1;
}else {
return 0;
}
}
[2,5,6,12,88, 1, 0, 99, 23].sort(compare);
// 结果
[0, 1, 2, 5, 6, 12, 23, 88, 99]
```
操作方法
* .concat(): 创建当前数组的副本,将接收到的参数添加到副本的末尾,最后返回新构建的数组
```
var color = ['red', 'green'];
var new_color = color.concat('yellow');
console.log(color);
console.log(new_color);
// 结果
["red", "green"]
["red", "green", "yellow"]
```
* .slice(): 接受一个或两个参数,即要返回项的起始和结束位置,基于当前数组创建新数组,不影响原始数组。参数中有负数,则用数组长度加上该负数,如果结束位置小于起始位置,则返回空数组。
```
var arr = ['a', 'b', 'c', 'd'];
var new_arr = arr.slice(0, 3);
console.log(new_arr);
// 结果
["a", "b", "c"]
```
* .splice(): 处理后影响原始数组
- 删除:.splice(删除的起始位置, 删除项的个数)
- 插入:.splice(插入的起始位置, 0(要删除项的个数), 要插入的项)
- 替换:.splice(起始位置, 要删除项的个数, 要插入的任意数量的项)
```
var arr = ['a', 'c', 'd', 'e', 'f', 'g'];
arr.splice(1, 1); // 删除
console.log(arr)
arr.splice(0, 0, '000'); // 插入
console.log(arr);
arr.splice(1, 1, 'A'); // 替换
console.log(arr);
// 结果
["a", "d", "e", "f", "g"] // 删除
["000", "a", "d", "e", "f", "g"] // 插入
["000", "A", "d", "e", "f", "g"] // 替换
```
位置方法
* .indexOf(): 从数组开头(位置0)开始向后查找
* .lastIndexOf(): 从数组末尾开始向前找
indexOf(),lastIndexOf()接受两个参数,第一个是要查找的项,第二个是查找的起始位置(可选)。
没找到返回-1, 查找每项使用的是===全等比较。
迭代方法
* .every(): 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
* .some(): 对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
* .filter(): 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
* .forEach(): 对数组中的每一项运行给定函数,没有返回
* .map(): 对数组中的每一项运行给定函数, 返回每次函数调用的结果组成的数组
以上方法中传入的函数都会接受三个参数:数组项的值、该项在数组中的位置、数组对象本身
```
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
// .every() 方法
var everyResult = numbers.every(function(item, index, array) {
return (item > 2)
})
console.log(everyResult); //结果:false
// .some() 方法
var someResult = numbers.some(function(item, index, array) {
return (item > 2)
})
console.log(someResult); //结果:true
// .filter() 方法
var filterResult = numbers.filter(function(item, index, array) {
return (item > 2)
})
console.log(filterResult); // 结果:[3, 4, 5, 4, 3]
// .map() 方法
var mapResult = numbers.map(function(item, index, array) {
return item * 2;
})
console.log(mapResult); // 结果:[2, 4, 6, 8, 10, 8, 6, 4, 2]
// .forEach() 方法,相当于for循环
numbers.forEach(function(item, index, array) {
console.log(item);
})
```
归并方法
* .reduce(): 迭代数组所有的项,构建一个最终返回的值,从数组的第一项开始,逐个遍历到最后一项
* .reduceRight(): 迭代数组所有的项,构建一个最终返回的值,从数组的最后一项开始,逐个遍历到第一项
```
// reduce()方法
var value = ['a', 'b', 'c', 'd', 'e'];
var str = value.reduce(function(prev, cur, index, array) {
return prev + cur;
})
console.log(str);
// 结果
abcde
// reduceRight()方法
var value = ['a', 'b', 'c', 'd', 'e'];
var str = value.reduceRight(function(prev, cur, index, array) {
return prev + cur;
})
console.log(str);
// 结果
edcba
```
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。