Array类型
ECMAScript数组的每一项可以保存任何类型的数据。即数组第一个位置可以保存字符串,第二个位置可以用来保存数组...以此类推。
2.1 创建数组
1.使用Array构造函数
var colors=new Array();
var colors=new Array(3); //创建一个包含三项的数值
var names=new Array('cc'); //创建包含一项,即字符串"cc"的数值
--------------------------------
同时也可以也可以省略 new操作符
var colors=Array(3);
var names=Array("cc");
2.使用数组字面量
与对象一样,在使用字面量创建数组时,也不会调用Array构造函数
var colors=["red","blue","green"];
var names=[]; //创建一个空数值
2.2 读取和设置数组的值
var colors=["blue","orange","yellow"];
console.log(colors[0]) //"blue"
colors[1]="black"; //修改第二项的在值
colors[3]="brown"; //添加第四项
2.3 数组删除和添加
由于数组的length属性它不是只读的。因此通过设置这个属性,可以从数组末尾移除项或添加项
1.删除
var colors=["red","blue"];
colors.length=1;
console.log(colors[1]); //undefined
如果设置length设置大于数组项数的值,则新增的每一项都会取得Undefined
colors.length=3;
console.log(colors[3]) //undefiend
2.添加
var colors=["red","blue"];
colors[colors.length]="green";
console.log(colors); // ["red","blue","green"]
2.4 检测数组
Array.isArray(value)
2.5 数组的方法
1.栈方法
数组可以表现的像栈一样即最新添加的项最早被移除。
1.1 push()
该方法可以接受任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。
var colors=new Array();
var count=colors.push("red","green");
console.log(count); //2
1.2 pop()
该方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项
var colors=["green","yellow"];
count=colors.pop();
console.log(count); //"yellow"
2.队列方法
队列数据结构的访问规则是先进先出。队列在列表的末端添加项,从列表的前端移除项。
2.1 shift()
它能够移除数组中的第一项并返回该项,同时将数组长度减1。
var colors=["cc","red","green"];
colors.shift(); //返回 "cc"
2.2 unshift()
var colors=["cc","red"];
var count=colors.unshift(1);
colors.log(count); //3
3.重排序方法
3.1 sort()
sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串。该方法默认是按升序排列
var nums=[1,12,3,4,31];
nums.sort();
console.log(nums); //[1,12,3,31,4]
因为是按字符串来比较所以要比较数值时,得到的结果并不是我们想要的。此时我们可以给sort()传入比较函数
function compare(value1,value2){
if(value1>value2){
return -1;
}else if(value1<value2){
return 1;
}else{
return 0;
}
}
var values=[1,3,5,6,12,3];
values.sort(compare);
console.log(values); //[12,6,5,3,3,1];
-----------------------------------------------------------
对于数值类型或者其valueOf()方法返回数值类型的对象类型,可以使用下面比较函数
function compare(value1,value2){
return value2-value1;
}
**:返回-1表示比较函数第一个值应该在第二个之前;返回-1表示第一个值应该在第二个之后的情况。
3.2 resverse()
该方法用于反转数组项的顺序
var s=[1,23,4,5];
s.reverse();
console.log(s); //[5,4,23,1];
4.操作方法
下面的concat()和splice()方法不会对原数组产生影响,请注意区别。
4.1 concat()
该方法可以基于当前数值中所有项创建一个新数组。即该方法可以创建当前数组的一个副本,然后将接受到的参数添加到这个副本末尾,最后返回新构建的数组。
var colors=["red","green","blue"];
var newColors=colors.concat(["cc","wgs"]);
console.log(colors); //["red","green","blue"]
console.log(newColors);["red","green","blue","cc","wgs"];
4.2 slice()
该方法能够基于当前数组中的一或多个项创建一个新数组。
4.1 参数
1.只有一个参数的情况下。
该方法返回从该参数指定位置开始到当前数组末尾所有项。
2.如果有两个参数。
该方法返回起始和结束位置之间的项但不包括结束位置项
3.如果结束位置小于起始位置
返回空数值
4.如果参数中有一个负数
则用数组长度加上该数来确定相应的位置。如 对于数组长度为5来说 slice(-2,-1)=>slice(3,4);
4.2 用法
var nums=[1,4,36,4,3];
var nums2=nums.slice(1); //[4,36,4,3]
var nums3=nums.slice(1,4); //[4,36,4]
4.3 splice()
该方法主要用途是对数组项的删除、替换、插入。
***:splice()方法始终返回一个数组,该数组包含了从原始数组中删除的项(如果没有删除任何项,则返回一个空数组).
4.3.1 功能
1. 删除
该方法对原数组进行删除,并将删除后的项以数组形式返回
两个参数:第一个参数指定要删除的起始位置,第二个参数表示要删除的项数
var colors=["red","green","blue"];
var removed=colors.splice(0,1);
console.log(colors) //["green","blue"]
console.log(removed) // ["red"]
2. 插入
可以向指定位置插入任意数量的项。
提供三个参数:起始位置、0(要删除的项数)和插入项
例如: splice(2,0,"cc");从当前数组的位置2开始插入字符串"cc"
removed=colors.splice(1,0,"yellow","orange");
console.log(colors); // [ 'green', 'yellow', 'orange', 'blue' ]
console.log(removed); // []
3. 替换
可以指定位置插入任意数量的项,且同时删除任意数量的项(要删除的项数不必和插入的项数相等)。
三个参数:起始位置、要删除的项数和要插入的任意数量的项
removed=colors.splice(1,1,"red","purple");
console.log(colors); //[ 'green', 'red',"purple" 'orange', 'blue' ]
console.log(removed);//["yellow"]
5.位置方法
5.1 indexOf()
该方法从数组的开头(位置0)开始向后查找
参数
第一个参数:表示要查找的项
第二个参数:(可选的)表示查找起点位置的索引,从数组头开始(即0开始)
返回值:返回要查找的项在数组中的位置,若没有找到则返回-1
***:查找的项与数组在匹配时是全等(===)
5.2 lastIndexOf()
该方法则从数组的末尾开始向前查找
参数
第一个参数:表示要查找的项
第二个参数:(可选的)表示查找起点位置的索引,从数组头开始(即0开始)
***:第二个参数索引也是从数组头开始的即数组的下标位置。
返回值:返回要查找的项在数组中的位置,若没有找到则返回-1
5.3 案例
var nums=[1,2,3,4,5,4,3,2,1];
console.log(nums.indexof(4)); //3
console.log(nums.lastIndexOf(4)) //5
console.log(nums.indexOf(4,4)) //5
console.log(nums.lastIndexOf(4,4)) //3
var person= {name:"cc"};
var people=[{name:"cc"}];
------------------------------------------------------------------------
var person={age:12};
var people=[{age:12}];
var morePeople=[person];
people.indexOf(person) //false
morePeople.indexOf(person); //true
关于上面的有疑惑的可以看看下面的测试:
console.log(person===people[0]) //false
console.log(people===morePeople) //false
console.log(person===morePeople[0]) //true
6.迭代方法
迭代方法主要是对数组值的检测。因为该方法都不会改变数组值
1. every()
对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
var nums=[1,2,3,4,5,4,3,2,1];
var result=nums.every(function(item,index,array){
return (item>2);
});
console.log(result) //false
2.filter()
对数组的每一项运行给定函数,返回该函数会返回true的项组成的数值
var nums=[1,2,3,4,5,4,3,2,1];
var result=nums.filter(function(item,index,array){
return (item>2);
});
console.log(result) //f[3,4,5,4,3]
3.forEach()
对数组中的每一项运行给定函数,这个方法没有返回值
4.map()
对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组
var nums=[1,2,3];
var result=nums.map(function(item,index,array){
return item*2;
});
console.log(result) //[2,4,6]
5.some()
对数组的每一项运行给定函数,如果该函数对任何一项返回true,则返回true
var nums=[1,2,3,4,5,4,3,2,1];
var result=nums.some(function(item,index,array){
return (item>2);
});
console.log(result) //true
7.归并方法
1.reduce()
该方法从数组的第一项开始,逐个遍历到最后。然后构建一个最终的返回值
参数
一共有四个参数,分别是:前一个值、当前值、项的索引和数组对象。
这个函数返回任何值都会作为第一个参数自动传入给下一项,因此第一个参数是数组的第一项,第二个参数是数组的第二项
使用:
var values=[1,2,3,4,5];
var sum=values.reduce(function(prev,cur,index,array){
return prev+cur;
});
console.log(15);
2.reduceRight()
该方法从数组的最后一项开始,向前遍历到第一项,然后构建一个最后的返回值