数组
定义 : 数据的有序列表
如何定义一个数组
var arr = new Array(); // 定义空数组
var arr = new Array(3); //定义长度为3的一个数组
var arr = new Array("hello"); //定义长度为1值为"hello"的数组
//提示:构建数组时可以省略new操作符
var arr = []; //定义空数组
var arr = [1,2,3] //定义长度为3值为1,2,3的数组
var arr = [1,2,,] //在ie8之前认为创建了3项,ie8之后认为创建了两项(杜绝使用)
// 提示:千万不要多添加逗号
数组的length属性
//当访问的索引大于数组长度,数组自动增加索引长度
var arr = [1,2];
arr[5] = 100;
console.log(arr);//[1,2,undefined,undefined,undefined,100]
//可以用length属性对已有数组初始化.
var arr = [1,2];
arr.length = 0;
console.log(arr);//[]
检测数组 : Array.isArray()方法
转换方法 : toString() valueOf() toLocaleString()
toString() valueOf() toLocaleString()都会将数组转为字符串且用逗号分隔.
jion()与toString()大致相同,只不过join()可以自定义分隔符(默认还是逗号分隔)
栈方法 : push() pop()
栈是先入后出的数据结构,所有操作在栈顶操作
push()入栈
pop()出栈
队列方法 : push() shift() 或 unshift() pop()
队列是先入先出的数据结构,可以从正方向,反方向模拟队列
正方向:
push()进队列
shift()出队列
反方向:
unshift()进队列
pop()出队列
重排序方法 : reverse() sort()
reverse()方法只是简单的数组颠倒
sort()方法,按照字典顺序对元素进行排序的,因此它假定元素都是字符串类型.
要想sort() 方法也能排序数字类型的元素,可以在调用方法时传入一个大小比较函数,排序时, sort() 方法将会根据该函数比较数组中两个元素的大小,从而决定整个数组的顺序。
function compare(num1, num2) {
return num1 - num2;
}
var nums = [3,1,2,100,4,200];
nums.sort(compare);
print(nums); //[1, 2, 3, 4, 100, 200]
操作数组 : concat() slice() splice()
concat()合并多个数组,不改变原数组(将方法中的数组添加到当前数组中)
slice()截取一个数组子集,不改变原数组(两个参数,第一个参数代表索引,第二个参数代表截取的长度)
splice()删除,插入,替换数组,且改变原数组(多个参数,第一个参数代表索引,第二个代表截取长度,剩余的替换/添加的值)
var arr1 = [1,2,3];
var arr2 = [4,5];
var arr = arr1.concat(arr2);
console.log(arr);//[1, 2, 3, 4, 5]
var arr3 = arr.slice(0,3);
console.log(arr3);//[1, 2, 3]
console.log(arr);//[1, 2, 3, 4, 5]
var arr4 = arr.splice(0,3,100,200,300)
console.log(arr);//[100, 200, 300, 4, 5]
位置方法 : indexOf() lastIndexOf()
都有两个参数 : 第一个参数代表要查找的起点索引,第二个参数代表要查找的值
默认情况下第一个参数可以省略,且indexOf()默认从数组开头查找,lastIndexOf()默认从数组末尾开始查找.
var arr = [1,2,3,4,5];
arr.indexOf(5);//4
迭代方法
每个方法接收两个参数 : 函数(数组中每一项都执行一次) 和 运行该函数作用域对象(一般省略)
- forEach() 只是运行函数,无返回值
- some() 运行函数,如果函数对数组中有一项或多项是true返回true
- every() 运行函数,如果函数对数组中每项运行结果都是true返回true
- filter() 运行函数,返回值为true的值组成的数组
- map() 运行函数,返回运行结果组成的新数组(copy数组常用)
function copy(arr){
return 2*arr;
}
var arr = [1,2,3];
var newArr = arr.map(copy);
console.log(newArr);//[2, 4, 6]
归并方法 : reduce() reduceRight()
这两个方法会迭代数组的所有项,并返回最终值(reduce()从左遍历,reduceRight()从右遍历)
4个参数 : 前一个值 , 当前值 , 项的索引 , 数组对象
function add(prev,cur,index,array){
return prev+cur;
}
var arr = [1,1,1];
var sum = arr.reduce(add);
console.log(sum);//3
参考书籍 : javascript高级程序设计5.2章节
根据w3c自己过一遍基础