[关闭]
@JRuiCoder 2016-04-19T10:18:00.000000Z 字数 2116 阅读 1190

数组

JavaScript数据结构


一、创建数组

两种方式声明
1. var num=[];
2. 构造函数:

  1. var num=new Array();

推荐使用[]操作符,效率更高。
可以使用Array.isArray(),判断一个对象是否是数组。

二、读写数组

使用[]操作符读取数组中的元素

三、由字符串生成数组

  1. var stringWord="hello hell hel he h";
  2. stringWord.split("");

四、对数组的整体性操作

浅复制,只是为被赋值的数组增加了一个新的引用,通过原引用修改了数组的值,另一个引用也会发生相应的变化。

  1. var num=[1,2,3,4,5,6,7];
  2. var samenum=num;
  3. num[0]=20;
  4. samenum[0]; //20

深复制:将原数组中的每一个元素都复制一份到新数组里面;

  1. function deepCope(num,samenum){
  2. for(vari=0;i<num.length;i++){
  3. num[i]=samenum[i];
  4. }
  5. }
  6. var num=[1,2,3,4,5,6,7];
  7. var samenum=[];
  8. deepCopy(num,samenum);
  9. num[0]=20;
  10. samenum[0]; //1

五、存取函数

提供一组用来访问数组元素的函数

查找元素

indexOf(),如果存在放回该元素在数组中的索引,如果不包含,返回-1
lastIndexOf() 函数返回相同元素中最后一个元素的索引,没有找到,返回-1

数组的字符串表示

join()和toString()

  1. num.join()

toString()使用方法类似
区别
toString()强制变换为字符串,但是不能加入参数,join可以传入一些参数作为分隔。

由已有数组创建新数组

concat()和splice()允许通过已有数组创建新数组。
concat()合并数组,作为参数的数组放在调用函数的数组后面
splice()
删除——只需要指定两个参数。从现有数组里截取一个新数组。第一个参数是截取的起始索引,第二个参数是截取的长度
插入——可以向指定位置插入任意数量的项,需要提供三个参数:起始位置,0,要插入的项
例如

  1. num.splice(2,0,"hello");

替换——指定三个参数:起始位置、要删除的项数、要插入的任意数量的项

  1. num.splice(2,1,"hello","world"

六、可变函数

改变数组的内容

为数组添加元素

有两个方法,push()和unshift();
push()会将一个元素添加到数组末尾
使用这个方法push一个数组,只是把整个数组当做添加数组中的一个子元素。
也可以使用

  1. num[num.length]="hello";

unshift()可以将元素添加在数组的开头

从数组中删除元素

pop()可以删除数组末尾的元素
shift()可以删除数组中的第一个元素
被删掉的元素作为方法返回,可以使用一个变量来保存删除的元素。
从中间添加和删除一个元素:splice()

为数组排序

reverse(),将数组中元素的顺序进行翻转
sort(),按照字典进行排序,从小到大排序,可以传入一个大小比较函数

  1. function compare(a,b){
  2. return a-b;
  3. }
  4. num.sort(compare);

七、迭代器方法

对数组中的每个元素应用一个函数,可以返回一个值,或一个新数组。

不生成新数组的方法

forEach(),该方法接受一个函数作为参数,例如

  1. function add(a){
  2. console.log(a+2);
  3. }
  4. var num=[1,2,3,4,5,6];
  5. num.forEach(add);

every(),接受一个返回值为布尔类型的函数, 对于所有的元素,该函数返回true,则该方法返回true。

  1. function more(a){
  2. return num>3;
  3. }
  4. var num=[1,2,3,4,5,6];
  5. var ok=num.every(more)
  6. console.log(ok);

some()方法接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,该方法就返回true。用法与every()类似。
reduce()
用来将数组中的元素连接成一个长的字符串

  1. function concatNum(a,b){
  2. return a+b;
  3. }
  4. var words=["the","weather","is","good"];
  5. console.log(words.reduce(concatNum));

reduceRight(),从右到左执行

生成新数组的迭代器方法

map(),对数组中的每个元素使用某个函数,返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。

  1. function add(a){
  2. return a+5;
  3. }
  4. var num=[1,2,3,4,5,6];
  5. console.log(num.map(add))

filter(),传入一个返回值为布尔类型的函数,结果均为true,该方法并不返回true,而是返回一个新数组,该数组包含结果为true的元素。

八、二维和多维数组

创建二维数组

  1. var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];

九、对象数组

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注