Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaScript数组方法 #15

Open
FanWalker opened this issue Oct 20, 2017 · 0 comments
Open

JavaScript数组方法 #15

FanWalker opened this issue Oct 20, 2017 · 0 comments

Comments

@FanWalker
Copy link
Owner

FanWalker commented Oct 20, 2017

这几天在笔试过程中,发现常考到一些算法题,而这些算法题大都都需要用到数组方法,所以在这里总结一下数组比较常用的几个方法。

join()

Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串。可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素。如果不指定分隔符,默认使用逗号。

var a = [1, 2, 3];   //创建一个包含三个元素的数组
a.join();       //  “1,2,3"
a.join(" ");   //  "1 2 3"
a.join("");    //   "123"
var b = new Array(10);   //长度为10的空数组
b.join('-')     //  '---------',9个连字号组成的字符串

Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组。

reverse()

Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组。在原先的数组中重新排列。例如:使用reverse()和join()方法生成字符串“3,2,1”:

var a = [1,2,3];
a.reverse().join();

sort()

Array.sort()方法将数组中的元素排序并返回排序后的数组。当不带参数调用sort()时,数组元素以字母表顺序排序(如有必要将临时转化为字符串进行比较):

var a = new Array("banana", "cherry", "apple");
a.sort();
var s = a.join(", ") ;  //  s == "apple, banana, cherry"

如果数组包含undefined元素,它们会被排到数组的尾部。
自己可以设置数组的排序顺序,为sort()方法传递一个比较函数,该函数决定了它的两个参数在排好序的数组中的先后顺序。假设第一个参数应该在前,比较函数应该返回一个小于0的数值。反之,返回大于0的数值。若它们的顺序无关紧要,返回0。例如:

var a = [33, 4, 1111, 222];
a.sort();       //字母顺序:1111,222,33,4
a.sort(function(a, b){    //4,33,222,1111
    return a-b;
});
a.sort(function(a, b){    //1111,222,33,4
    return b-a;
});

concat()

Array.concat()方法创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和concat()的每个参数。

var a = [1, 2. 3];         
a.concat(4, 5);         //返回[1,2,3,4,5]
a.concat([4, 5]);       //返回[1,2,3,4,5]
a.concat([4, 5], [6, 7])          //返回[1,2,3,4,5,6,7]
a.concat(4, [5, [6, 7]])          //返回[1,2,3,4,5,[6,7]]

slice()

Array.slice()返回指定数组的一个片段或子数组。它的两个参数分别指定了片段的开始和结束的位置。slice()不会修改调用的数组。参数为-1代表最后一个元素,-2为倒数第二个、、、。

var a = [1, 2, 3, 4, 5];
a.slice(0, 3);   //返回[1, 2, 3]
a.slice(3);      //返回[4, 5]
a.slice(1, -1);   //返回[2, 3, 4]
a.slice(-3, -2);   //返回[3]

splice()

Array.splice()是在数组中插入或删除元素的通用方法。不同于slice()和concat(),splice()会修改调用的数组。
splice()的第一个参数指定了插入或删除的起始位置,第二个参数指定了应该从数组中删除的元素的个数,如果第二个参数省略,从起始点开始到数组结尾的所有元素都将被删除。
splice()返回一个由删除元素组成的数组。

var a = [1, 2, 3, 4, 5, 6, 7, 8];
a.splice(4);     // 返回[5, 6, 7, 8];  a为[1, 2, 3, 4]
a.splice(1, 2);   // 返回[2, 3];  a为[1, 4]
a.splice(1, 1);    //返回[4];  a为[1]

用splice()插入元素

var a = [1, 2, 3, 4, 5];
a.splice(2, 0, 'a', 'b');     //返回[];    a为[1, 2, 'a', 'b', 3, 4, 5]
a.splice(2, 3, [1, 2], 3);   //返回['a', 'b'];   a为[1, 2, [1, 2], 3, ,3, 4, 5]

forEach()

forEach()从头到尾遍历数组,为每个元素调用指定的函数。
var data = [1, 2, 3, 4, 5];
var sum = 0;
data.forEach(function(value){     //value 为数组元素的值
       sum += value;                //   sum = 15
});
data.forEach(function(v, i, a){     //参数分别为元素的值,索引,数组本身
       a[i] = v+i;             // data为[2, 3, 4, 5, 6]
});

map()

map()将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。例如:

a = [1, 2, 3];
b = a.map(function(x){ return x*x;}  //b是[1, 4, 9]

传递给map()和forEach()的函数的调用方式一样。但传递给map()的函数应该有返回值。

filter()

filter()返回的是调用数组的一个子集。传递的函数是用来逻辑判定的,该函数返回true或false。

data = [1, 2, 3, 4, 5];
smallvalues = data.filter(         //smallvalues为[1, 2];
       function(x){
            return x<3;  
       }
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant