JavaScript-Array 对象及方法(下)

数组对象的方法(二)


4. slice()方法

说明:slice(start,end)以数组形式返回指定位置的数组元素,不会改变原数组;
解析:
1、start为起始位置(从0开始计),end为终止位置(不包含终止位置)

var arr=[1,2,3,'Tom',"5"];
arr.slice(2,4);//[3, "Tom"]
arr.slice(2,2);//[]

2、如果end没有填,则选取从 start 到数组结尾的所有元素

var arr=[1,2,3,'Tom',"5"];
arr.slice(2);//[3, "Tom", "5"]
arr.slice(1);//[2, 3, "Tom", "5"]
arr.slice();//[1, 2, 3, "Tom", "5"]

3、如果start>=end,则返回为空数组[]

var arr=[1,2,3,'Tom',"5"];
arr.slice(4,3);//[]
arr.slice(3,3);//[]

4、如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度;如果 end 为负,就将它作为 length + end 处理。

var arr=[1,2,3,'Tom',"5"];
arr.slice(-2,4);//["Tom"]
arr.slice(2,-2);//[3]

5、如果start或者end,为正,或者为负(length+负值)超数组长度时,当作边界值处理(0或者数组长度)

var arr=[1,2,3,'Tom',"5"];
arr.slice(-6,1);//[1],这里的5-6=-1超过数组长度,当作0处理
var arr=[1,2,3,'Tom',"5"];
arr.slice(4,6);//["5"],这里的6超范围,故当作5处理
arr.slice(6,4);//[],start>=end,故为空

5. splice()方法

newArr=arr.splice(start,delectCount,newItem1,newItem2,…)
1. 从数组中某个位置开始移除连续的一个或多个元素
2. 如有必要,可向原数组中添加新元素
3. 返回的newArr是一个由被删除元素所组成的数组

参数说明:

参数说明必要性
start指定操作起始位置,此位置从0开始计算必要
delectCount要删除元素的数量必要
newItem1,newItem2,…要插入的新元素,插入位置为start非必选

举例:
1、删除,添加操作

var arr=[1,2,3,"4","top"];
delArr=arr.splice(1,3,"newItem");//[2, 3, "4"]
console.log(arr)//[1, "newItem", "top"]

2、只进行删除

var arr=[1,2,3,"4","top"];
delArr=arr.splice(1,100);//[2, 3, "4", "top"]
console.log(arr)//[1]

3、只进行添加
这里写图片描述


6. reverse()和sort()

6.1 语法:reverse()反转数组顺序

var arr1=[1,5,2,3,"xx",4];
arr1.reverse();
console.log(arr1);//[4, "xx", 3, 2, 5, 1]

这个数组方法的作用直观明了,将数组的顺序反转了,但是实际应用中不够灵活,因此有了sort()方法。

6.2 语法:arr.sort(sortfunction)
sort()并不是一个单纯的方法,对,它不单纯。
sort() 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

  • sort方法进行10以内的排序,如下:

    sort方法进行10以内的排序

  • 但是当排序数值含有大于10的数值时,如下:
    sort方法进行含大于10的数值排序
    可见,即便例子中的值没问题,但是sort()方法也会根据测试字符串的结果改变原来的顺序,因为数值2虽然小于11,但是进行字符串比较时,”11”则在”2”“3”前面,于是数组的顺序就被修改了。

这时候,我们就该用到sort(sortfunction)方法中的参数了,如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

  • 负值,如果所传递的第一个参数比第二个参数小。
  • 零,如果两个参数相等。
  • 正值,如果第一个参数比第二个参数大。
 function compare(value1,value2){
     if(value1<value2){
         return -1;
     }else if(value1>value2){
         return 1;
     }else{
         return 0;
     }
 }
 //将上面这个比较函数作为参数传递给sort()方法,进行了升序排序,结果如下
 var arr2=[1,2,3,1,11];
 arr2.sort(compare);//[1, 1, 2, 3, 11]
//如果想要降序,只需对调比较函数返回的值即可。

当然,sort()可以做的不止是升序排序和降序排序,不同的比较函数将导致不同的排序结果,其他类型此处不再探究。


7. toString 方法

说明:objectname.toString([radix]),返回对象的字符串表示。

参数必要性说明
objectname必选项。要得到字符串表示的对象。
radix可选项。指定将数字值转换为字符串时的进制。

这里写图片描述

var arr=[1,12,3,4];
    a.toString();//"1,12,3,4"

这里值得一提的是,NumbertoString不同于其他,是比较特殊的;

var num1=10,num2=10.14;
//当没有参数传入时,默认十进制输出
num1.toString();//"10"
num2.toString();//"10.14"

//当传入参数时
num1.toString(2);//"1010"
num1.toString(8);//"12"
num1.toString(10);//"a"

8. valueOf 方法

说明:object.valueOf( )返回指定对象的原始值。
这里写图片描述

7vs8. toString()和valueOf()的共同点与不同点

共同点:在 JavaScript 中,toString()方法和valueOf()方法,在输出对象时会自动调用。
不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString

//例子1如下:
<script>
 var obj = {};
 obj.valueOf = function()
 {
 return 10;
 }
 obj.toString = function()
 {
 return "return value";
 }

 var result = obj + 1; //var result = obj.valueOf() + 1;
 alert(result);
 alert(obj); //alert(obj.toString());
</script>
//例子2如下:
function obj() { }
 obj.prototype.toString = function(){
  return 'dfsf';
 };
 obj.prototype.valueOf = function(){
  return '3333';
 };
 var e = new obj();
 var o = new obj();
 alert(o);//alert(obj.toString()) 
 alert(o+e);//alert(obj.valueOf()+obj.valueOf())
</script>

toString vs valueOf的差别:
返回值类型的差别:
1. toString一定将所有内容转为字符串
2. valueOf取出对象内部的值,不进行类型转换
用途的差别:
1. toString专用于输出字符串
2. valueOf专用于算数计算和关系运算
共同的缺点:无法获取nullundefined的值


9. toLocaleString 方法

说明:toLocaleString能根据区域设置的默认格式把 Date 对象转换为字符串,并返回结果。

文档给出的说明是:
toLocaleString 方法返回一个 String 对象,这个对象中包含了用当前区域设置的默认格式表示的日期。

  • 对于公元 1601 和 1999 之间的时间,日期格式要按照用户的“控制面板”中“区域设置”来确定。
  • 对于此区间外的其他时间,使用 toString 方法的默认格式。
    例如,同样是 1 月 5 日,在美国,toLocaleString 可能会返回 “01/05/96 00:00:00”,而在欧洲,返回值则可能是 “05/01/96 00:00:00”,因为欧洲的惯例是将日期放在月份前面。

注意 toLocaleString 只用来显示结果给用户;不要在脚本中用来做基本计算,因为返回的结果是随机器不同而不同的。

例:
这里写图片描述


ECMAScript5新增

10. 位置方法

  • ECMAScript5为数组实例添加了两个位置方法:indexOf()lastIndexOf()。这两个方法都接收两个参数:(1.要查找的项和2.(可选的)表示查找的起始位置的索引)。
  • 其中,indexOf()方法表示从数组开头向后找,lastIndexOf()则从末尾向前查找。找到将返回所找到的项在数组中的位置;如果找不到,则返回-1。寻找项时,使用全等===进行查找匹配。
var numArr=['a','b',3,4,'c'];
alert(numArr.indexOf("b"));//1
alert(numArr.lastIndexOf("b"));//1
alert(numArr.lastIndexOf("B"));//-1

11. 迭代方法

ECMAScript5为数组实例添加了5个迭代方法:
每个方法都接收两个参数:要在每一项上运行的函数 和 (可选的)运行该函数的作用域对象。
传入这些方法中的函数会接收三个参数:数组项的值,该项在数组中的位置,数组对象本身。

方法说明
forEach()对数组中的每一项运行 给定函数。该方法没有返回值。
every()对数组中的每一项运行 给定函数,如果数组的每一项都返回true,则返回true。
some()对数组中的每一项运行 给定函数,如果数组的任意一项返回true,则返回true。
fliter()如果数组的每一项都返回true,则返回true。返回该函数会返回true的项组成的数组。
map()如果数组的每一项都返回true,则返回true。返回每次函数调用的结果组成的数组。

12. 归并方法

.reduce(function(v1,v2),value) / .reduceRight(function(v1,v2),value)
遍历数组,调用回调函数,将数组元素组合成一个值,reduce从数组第一项开始,reduceRight反向,方法有两个参数

1.回调函数:把两个值合为一个,返回结果

2.value,一个初始值(可选)

var a=new Array(1,2,3,4,5,6);
    console.log(a.reduce(function(v1,v2){
            return v1+v2;
            })); // 21,执行了数组所有值求和

    console.log(a.reduceRight(function(v1,v2){
                return v1-v2;
                },100)); // 79

13. Array.isArray(element)

这是Array对象的一个静态函数,用来判断一个对象是不是数组

var a = new Array();
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false

因此,对于Array.isArray()不可用的情况下,使用Object.prototype上的原生toString()方法判断数据类型,使用方法如下:
Object.prototype.toString.call(value)
因此可封装Array.isArray方法如下:

if(typeof Array.isArray==="undefined"){
    Array.isArray=function(arg){
        return Object.prototype.toString.call(arg)==="[object Array]"
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值