js 数据引用类型(二)——数组Array
2018-01-26 22:06
531 查看
除了 Object之外,Array类型也是js中最常用的类型了。
创建数组有2种基本方式,一是Array构造函数,如
二是使用数组字面量表示法,如
(一) 转换方法
数组属于对象,所有的对象都具有toString()、toLocalString()和valueof()方法。调用toString方法返回的是数组的字符串显示,调用valueof方法还是数组本身,而toLocalString方法跟toString方法类似,区别是它调的是数组每一项的toLocalString方法。
(二)栈方法
栈是一种LIFO(后进先出)的数据结构。push()与pop()方法使数组实现类似栈的方法,push()方法是为数组末端添加任意数量的参数,pop()方法则从数组删除最后一项。
队列的访问规则是FIFO(先进先出),队列在数组末端添加项,从列表的前端删除项,结合shift()与push()方法,可以像使用队列一样使用数组。shift()方法指删除数组第一项;
reverse()与sort()方法,前者按倒序排列数组,但不够灵活;后者按照升序排列数组,但在字符串比较中,也不是最佳方案,但返回的都是数组形式。如:
(sort()内部机制应该是冒泡的原理,如比较函数返回值<=0,相对位置不变;如返回值>0,相对位置改变。)
4000
(五)操作方法
concat()方法,slice()方法,splice()方法。
第一种代表的是合并,无论合并的是字符串还是数组,都将合并成一个新的数组。
删除,传入2个参数,第一个参数代表删除的起始位置,第二个参数代表删除的项数。例如arr.splice(0,2)会删除arr的前两个项。
插入,传入3个参数,第一个参数代表插入的起始位置,第二个参数为0,第三个参数代表的是插入项。如果要插入多个项,则可传入第四,第五等其他项。例如arr.splice(2,0,"red","blue")会从arr的第3个位置插入“red”,“blue”字符串。
替换,传入3个参数,第一个参数代表插入的起始位置,第二个参数为1,第三个参数代表的是替换项。插入项不必与删除项相等。例如arr.splice(2,1,"red","blue")会从arr删除第3个位置的项,并插入“red”,“blue”字符串。
(六)迭代方法
数组有五种迭代方法,分别为every(),filter(),map(),some(),foreach()。
every()与some()类似,都会返回true与false,区别在于every()是全部为true时才返回true,而some只要有一项为true则返回true。
var values=[1,3,5,6,8,9];
var result1=values.every(function(item,index,array){
return item>2;
});
alert(result1); //false
var result2=values.some(function(item,index,array){
return item>2;
});
alert(result2); //truefilter()可以理解为过滤,即可以返回符合某条件的一组数组。
var values=[1,3,5,6,7,9];
var result=values.filter(function(item,index,array){
return item*2;
})
alert(result); //[3,5,6,7,9]
foreach类似于for循环,这一方法是不含返回值的。
(七)位置方法
顾名思义,通过返回值来判断某项处于哪个位置。有indexOf方法和lastIndexOf方法,前者是从数组的开头向后查找,后者是从数组的结尾向前查找,查不到则返回-1,传入两个参数,第一个指要查找的对象,第二个指查找的位置。
var values=[1,2,3,4,5,4,3,2,1];
values.indexOf(4); //3
values.lastIndexOf(4); //5
values.indexOf(4,4); //5(八)归并方法
指将数组的所有项进行迭代,然后构建一个最终的返回值。有reduce与reduceRight两种方法,第一种从左开始归并,第二种从右开始归并。
var values=[1,2,3,4,5];
var result=values.reduce(function(pre,cur,index.array){
return pre+cur;
});
alert(result); //15pre参数代表前一个,cur代表当前,index代表当前索引,array代表数组对象。从当前数组来看,pre代表1,cur代表2,这一过程会持续到访问每一项,最后返回结果。
reduceRight方法类似,只不过方向相反而已。
数组的八种方法也总结完毕,数据一般以数组的形式存在,掌握这8种方法,对于操作数据会有很大的把控。
创建数组有2种基本方式,一是Array构造函数,如
var colors=new Array(3);
二是使用数组字面量表示法,如
var colors=["red","blue","green"];那如何检测数据类型是Array呢,使用的便是instanceof , 如
value instanceof Array == true数组是操作数据的一大重点,因此数组本身有很多种方法用来处理数据。
(一) 转换方法
数组属于对象,所有的对象都具有toString()、toLocalString()和valueof()方法。调用toString方法返回的是数组的字符串显示,调用valueof方法还是数组本身,而toLocalString方法跟toString方法类似,区别是它调的是数组每一项的toLocalString方法。
(二)栈方法
栈是一种LIFO(后进先出)的数据结构。push()与pop()方法使数组实现类似栈的方法,push()方法是为数组末端添加任意数量的参数,pop()方法则从数组删除最后一项。
var colors=new Array(); //创建数组 var count=colors.push("red","green"); //推入2项 alert(count); //2
var item=colors.pop(); //删除最后一项 alert(item); //green alert(colors.length); //1(三)队列方法
队列的访问规则是FIFO(先进先出),队列在数组末端添加项,从列表的前端删除项,结合shift()与push()方法,可以像使用队列一样使用数组。shift()方法指删除数组第一项;
var colors=new Array(); //创建数组 var count=colors.push("red","green"); //推入2项 alert(count); //2而unshift()与shift()相反,往数组前端添加一项,unshift()与pop()方法从相反的方向来模仿队列。
var item=colors.shift(); //删除前一项
alert(item); //red
alert(colors.length); //1
var colors=new Array(); //创建数组 colors.unshift("red","green"); //推入2项 alert(colors); //["red","green"] colors.unshift("blue"); //前端推入1项 colors.pop(); //删除最后一项 alert(colors); //["blue",red](四)重排序方法
reverse()与sort()方法,前者按倒序排列数组,但不够灵活;后者按照升序排列数组,但在字符串比较中,也不是最佳方案,但返回的都是数组形式。如:
reverse() var values=[5,4,3,2,1]; values.reverse(); //1,2,3,4,5 sort() var values=[2,4,5,8,10]; values.sort(); // 2,4,10,5,8因此使用sort()升序的时候,我们需要采用比较两个参数的方法来处理,当第一个参数应位于第二个前面时返回-1,相等时返回0,位于后面时返回1
(sort()内部机制应该是冒泡的原理,如比较函数返回值<=0,相对位置不变;如返回值>0,相对位置改变。)
4000
function compare(a,b){ if(a<b){ return -1; }else if(a==b){ return 0; }else{ return 1; } } var values=[1,3,7,5,15,35]; values.sort(compare); //1,3,5,7,15,35那如何利用sort()方法来降序呢?那就是将比较函数结果反过来,参数一应位于参数二后面时返回1,相等时返回0,参数一位于参数二后面时返回-1;
(五)操作方法
concat()方法,slice()方法,splice()方法。
第一种代表的是合并,无论合并的是字符串还是数组,都将合并成一个新的数组。
var colors=["red","green"]; var colors2=colors.concat("yellow",["black","blue"]); alert(colors); //["red","green"]; alert(colors2); //["red","green","yellow","black","blue"];第二种代表的是复制,传入1个参数,代表的是从参数指定位置到当前数组末尾的所有项;传入2个参数,代表的是从第一个参数指定位置到第二个参数指定位置的所有项,但不包括结束位置的项(slice方法不影响原始数组)。
var colors=["red","green","yellow","black","blue"]; var colors2=colors.slice(1); alert(colors2); //["green","yellow","black","blue"]; var colors3=colors.slice(1,4); alert(colors3); //["green","yellow","black"];splice方法可以算是最强大的数组方法了,它有删除,插入,替换功能。
删除,传入2个参数,第一个参数代表删除的起始位置,第二个参数代表删除的项数。例如arr.splice(0,2)会删除arr的前两个项。
插入,传入3个参数,第一个参数代表插入的起始位置,第二个参数为0,第三个参数代表的是插入项。如果要插入多个项,则可传入第四,第五等其他项。例如arr.splice(2,0,"red","blue")会从arr的第3个位置插入“red”,“blue”字符串。
替换,传入3个参数,第一个参数代表插入的起始位置,第二个参数为1,第三个参数代表的是替换项。插入项不必与删除项相等。例如arr.splice(2,1,"red","blue")会从arr删除第3个位置的项,并插入“red”,“blue”字符串。
(六)迭代方法
数组有五种迭代方法,分别为every(),filter(),map(),some(),foreach()。
every()与some()类似,都会返回true与false,区别在于every()是全部为true时才返回true,而some只要有一项为true则返回true。
var values=[1,3,5,6,8,9];
var result1=values.every(function(item,index,array){
return item>2;
});
alert(result1); //false
var result2=values.some(function(item,index,array){
return item>2;
});
alert(result2); //truefilter()可以理解为过滤,即可以返回符合某条件的一组数组。
var values=[1,3,5,6,7,9]; var result=values.filter(function(item,index,array){ return (item>2); }) alert(result); //[3,5,6,7,9]map()也返回一组数组,但可以实现每一项进行加工,例:
var values=[1,3,5,6,7,9];
var result=values.filter(function(item,index,array){
return item*2;
})
alert(result); //[3,5,6,7,9]
foreach类似于for循环,这一方法是不含返回值的。
(七)位置方法
顾名思义,通过返回值来判断某项处于哪个位置。有indexOf方法和lastIndexOf方法,前者是从数组的开头向后查找,后者是从数组的结尾向前查找,查不到则返回-1,传入两个参数,第一个指要查找的对象,第二个指查找的位置。
var values=[1,2,3,4,5,4,3,2,1];
values.indexOf(4); //3
values.lastIndexOf(4); //5
values.indexOf(4,4); //5(八)归并方法
指将数组的所有项进行迭代,然后构建一个最终的返回值。有reduce与reduceRight两种方法,第一种从左开始归并,第二种从右开始归并。
var values=[1,2,3,4,5];
var result=values.reduce(function(pre,cur,index.array){
return pre+cur;
});
alert(result); //15pre参数代表前一个,cur代表当前,index代表当前索引,array代表数组对象。从当前数组来看,pre代表1,cur代表2,这一过程会持续到访问每一项,最后返回结果。
reduceRight方法类似,只不过方向相反而已。
数组的八种方法也总结完毕,数据一般以数组的形式存在,掌握这8种方法,对于操作数据会有很大的把控。
相关文章推荐
- js数据类型 ——引用类型(Array).3/3
- 24 JS基础之--数组API(引用类型Array)
- js--引用类型Array--2.数组合并几种方法
- js数组:string(字符串的对象包装类型),Array(引用类型)
- js数据类型 ——引用类型(Array).2/3
- js--引用类型Array--3.数组简单复制和深度复制
- js数组引用数据类型分析。
- js数据类型 ——引用类型(Array).1/3
- js引用对象和引用一般数据类型的注意点
- 解析一个数组JsonArray下有多种数据类型JsonObject的Json
- mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler
- java引用数据类型-数组
- iOS 多种数据类型存入NSMutableArray数组
- JavaScript引用类型之Array数组的concat()和push()方法的区别
- 引用数据类型---数组
- js数据类型判断和数组判断
- js数据类型: 对象,数组,等
- 黑马程序员-引用数据类型-数组
- 对js中的引用类型的理解(3)——Array类型
- JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法