《javascript高级程序设计》笔记:数组方法

将数组转换成字符串

join()能够将数组用指定的字符分割成字符串

方法用法变量的值表达式的值
假设 arr = [1,2,3]
joinarr.join()[1,2,3]“1,2,3”
arr.join(undefined)[1,2,3]“1,2,3”
arr.join(“-“)[1,2,3]“1-2-3”
arr.join(null)[1,2,3]“1null2null3”
arr.join({})[1,2,3]“1[object Object]2[object Object]3”

结论:
1.不给 join()方法传入任何值,或者给它传入 undefined,则使用逗号作为分隔符;
2.join()会将传入的参数隐式转换成字符串形式
3.如果数组中的某一项的值是 null 或者 undefined,那么返回的结果中以空字符串表示,toString()也遵循该准则 [1,2,undefined,3].join() ==> "1,2,,3"

toString() / toLocaleString() 也能够将数组转换成字符串;
alert() 方法会隐式调用toString()方法

调用数组的 toString() 方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串;

当调用数组的 toLocaleString() 方法时,它也会创建一个数组值的以逗号分隔的字符串。而与之前方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的 toLocaleString() 方法,而不是 toString() 方法,下面的例子可以解释这一现象:

var person1 = {
    toLocaleString : function () {
        return "Nikolaos";
    },
    toString : function() {
        return "Nicholas";
} };
var person2 = {
    toLocaleString : function () {
        return "Grigorios";
    },
    toString : function() {
        return "Greg";
} };
var people = [person1, person2];
alert(people);
alert(people.toString());
alert(people.toLocaleString());
//Nicholas,Greg
//Nicholas,Greg
//Nikolaos,Grigorios

数组的增删操作

1.堆栈方法

方法用法变量的值表达式的值
假设 arr = [1,2,3]
pusharr.push(4,5)[1,2,3,5]4
接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
poparr.pop()[1,2]3
arr.pop(123)[1,2]3
从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项(有参忽略)
unshiftarr.unshift(4,5)[4,5,1,2,3]5
接收任意数量的参数,把它们逐个添加到数组首端,并返回修改后数组的长度
shiftarr.shift()[2,3]1
从数组首端移除第一项,减少数组的 length 值,然后返回移除的项(有参忽略)

2.concat方法

concat()方法可以基于当前数组中的所有项创建一个新数组。具体来说,这个方法会先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。

1.在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
2.如果传递给 concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。
3.如果传递的值不是数组,这些值就会被简单地添加到结果数组的末尾
4.arr === arr.concat() 为false

方法用法变量的值表达式的值
假设 arr = [1,2,3]
concatarr.concat()[1,2,3][1,2,3]
arr.concat(4,5)[1,2,3][1,2,3,4,5]
arr.concat(4,5,[6,7])[1,2,3][1,2,3,4,5,6,7]

3.slice方法

slice()方法用于数组的截取,可以接受一或两个参数,即要返回项的起始和结束位置;

1.没有参数时,会创建一个副本,但arr !== arr.slice()
1.在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。
2.如果有两个参数,该方法返回起始和结束位置之间的项,但不包括结束位置的项
3.如果 slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置
4.如果结束位置小于起始位置,则返回空数组。

方法用法变量的值表达式的值
假设 arr = [1,2,3,4,5]
slicearr.slice()[1,2,3,4,5][1,2,3,4,5]
arr.slice(1)[1,2,3,4,5][2,3,4,5]
arr.slice(1,4)[1,2,3,4,5][2,3,4]
arr.slice(-2,-1)[1,2,3,4,5][4]
arr.slice(4,3)[1,2,3,4,5][]

4.splice方法

splice(删除的第一项索引,删除元素个数,插入的内容…)
splice()的主要用途是向数组的中部插入项,但使用这种方法的方式则有如下 3 种:

1.删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数
2.插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项
3.替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何 项,则返回一个空数组)

方法用法变量的值表达式的值
假设 arr = [1,2,3,4,5]
splicearr.splice()[1,2,3,4,5][]
arr.splice(1)[2,3,4,5][1]
arr.splice(1,2)[1,4,5][2,3]
arr.splice(-2,2)[1,2,3][4,5]
arr.splice(1,2,”a”,”b”,”c”,”插入”)[1,”a”,”b”,”c”,”插入”,4,5][2,3]
arr.splice(1,1,”替代”)[1,”替代”,3,4,5][2]

数组排序

1.reverse()方法

数组反转,数组自身改变,并返回反转后的值

方法用法变量的值表达式的值
假设 arr = [1,2,3,4,5]
reversearr.reverse()[5,4,3,2,1][5,4,3,2,1]

2.sort()方法
参考:js中sort()方法的用法,参数以及排序原理

在默认情况下(没有参数),sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。 为了实现排序,sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串

因此,会出现下面这种情况:

var arr1 = ["George", "John", "Thomas", "James", "Adrew", "Martin"];
arr.sort(); // ["Adrew", "George", "James", "John", "Martin", "Thomas"]

var arr2 = ["10", "5", "40", "25", "1000", "1"];
arr.sort(); // ["1", "10", "1000", "25", "40", "5"] 

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

    原文作者:同梦奇缘
    原文地址: https://segmentfault.com/a/1190000010682257
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞