js基础之数组

一、数组的声明及遍历

1.数组的声明:

var arr = [1,2,3,4,5];     //数组字面量
var arr1 = new Array(1,2,3,4,5);    //通过构造函数

上面两种定义数组的方式几乎是相同的,唯一不同之处就在于当传一个数值的时候结果不同

var arr = [10];   //[10]
var arr1 = new Array(10);    //返回一个长度为10的空数组

2.数组的遍历:

var arr = [1,2,3,4,5,6];
for (var i=0; i<arr.length; i++){
     console.log(arr[i]);
 }

二、数组中的方法:

数组中的方法分为两类,第一类是不改变原数组的方法,第二类是改变原数组的方法
1. 不改变原数组的方法
不改变原数组的方法有: push,pop,shift,unshift,splice,sort,reverse
(1)push():表示向原数组中添加数据,添加在原数组的末尾,参数可以是一位也可以是多位,返回值是添加完数据之后的数组长度。

var arr = [1,2,3,4,5,6];
var arr1 = [1,2,3,4,5,6];
console.log(arr.push(7));     //[1,2,3,4,5,6,7]
console.log(arr1.push(7,8,9));   //[1,2,3,4,5,6,7,8,9]

push方法的实现

//push方法的实现
Array.prototype.myPush = function(){
    for (var i=0; i<arguments.length; i++){
        this[this.length] = arguments[i];
    }
};

(2)pop():表示从原数组中剪切值,不能传参,每次只能从末尾剪切一个值,返回值是剪切掉的值

var arr = [1,2,3,4,5,6];
var arr1 = [1,2,3,4,5,6];
arr.pop();   //[1,2,3,4,5]
arr1.pop(3);  //[1,2,3,4,5]

(3)unshift():表示在原数组的最前边添加数据,和push()方法相对应

var arr = [1,2,3,4,5,6];
var arr1 = [1,2,3,4,5,6];
console.log(arr.unshift(0));   //[0,1,2,3,4,5,6]
console.log(arr1.unshift(-1,0));  //[-1,0,1,2,3,4,5,6]

(4)shift():表示在原数组的最前边剪切掉数据,和pop()方法相对应

var arr = [1,2,3,4,5,6];
console.log(arr.shift());   //[2,3,4,5,6]

(5)reverse():表示将原数组进行倒置

var arr = [1,2,3,4,5,6];
console.log(arr.reverse());   //[6, 5, 4, 3, 2, 1]

(6)splice(); 表示截取数据,返回值是截取的数据,且改变原数组。
用法:splice(截取数据的起始位置,截取几位,切口处要添加的数据)

var arr = [1,2,3,4,5,6];
var newArr = arr.splice(1,2);    //newArr = [2,3]   arr = [1, 4, 5, 6]
var arr1 = [1,2,3,4,5,6];
arr1.splice(1,2,7,8);    //arr1 = [1, 7, 8, 4, 5, 6]
var arr2 = [0,1,2,3,6,7,8];
arr2.splice(4,0,4,5);     //arr2 = [0, 1, 2, 3, 4, 5, 6, 7, 8]

(7)sort();表示按从小到大的顺序进行排序,但是sort方法是按ASCII的顺序进行排序的,排序之后的数组会覆盖原数组。

var arr1 = [6,5,3,4,2,1];
arr1.sort();     // arr1 = [1, 2, 3, 4, 5, 6]

接下来再看一个例子:

var arr1 = [10,6,5,3,4,2,1];
arr1.sort();     // arr1 = [1, 10, 2, 3, 4, 5, 6]

这个例子的排序结果并非我们想要的,那么怎么实现升序呢?为了方便,sort()函数为开发者们预留了一个编程接口,我们可以自己写程序实现升序的效果

//升序
var arr1 = [10,6,5,3,4,2,1];
arr1.sort(function(a,b){
    return a-b;
});

这样就可以实现数组的排序效果。这里有三条标准,(1)必须有两个参数a,b。(2)如果返回值大于0,则交换两个参数的位置,如果返回值小于0,则不交换两个参数的位置。(3)如果返回值等于0,则位置不变。这个函数不需要我们自己调用,系统内部会自动调用,实际上这就是一个冒泡排序的过程。

如果我想要实现倒序呢?又该如何?

//降序
var arr1 = [10,6,5,3,4,2,1];
arr1.sort(function(a,b){
    return b-a;
});

这样就实现降序了。如果a<b,则应该交换两者的位置,所以返回一个正值b-a;如果a>b,则不用交换两者位置,所以返回一个负值b-a。

接下来,我想要实现乱序,又该如何呢?
直接看代码。。。

var arr1 = [10,6,5,3,4,2,1];
arr1.sort(function(a,b){
     return (Math.random()-0.5);
 });

,只要让return回来的结果有正有负,且正负出现的顺序不定,就可以实现乱序。因为Math.random()方法返回的结果处于开区间0到1之间,我们只需要将这个值-0.5,让return的结果处于开区间-0.5到0.5之间即可实现乱序。

sort()除了可以实现以上功能之外,还可以应用的很灵活。

var wang = {
            age: 28,
            male: "male"
        };
var liu = {
     age: 30,
     male: "female"
 };
 var zhang = {
     age: 24,
     male: "male"
 };
 var arr = [wang,liu,zhang];
 arr.sort(function(a,b){
     return a.age-b.age;
 })     //返回按年龄从小到大排列的对象

2. 不改变原数组的方法
不改变原数组而是返回一个新数组的方法有:concat(),slice(),join(),split(),toString()
(1)concat():表示数组的拼接,两个数组拼成一个数组

var arr = [1,2,3,4,5];
var arr1 = [6,7,8,9];
var newArr = arr.concat(arr1);     //newArr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var arr = [1,2,3,4,5];
var arr1 = [6,7,8,9];
 var arr2 = [10,11,12];
 var newArr = arr.concat(arr1,arr2);     //newArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

(2)slice():截取,只返回截取的数据,原数组不变

var arr = [1,2,3,4,5];
var newArr = arr.slice(1);      //newArr = [2, 3, 4, 5]
var newArr1 = arr.slice(1,3);    //newArr = [2, 3]

只传一个参数,表示从第一位截取到最后一位。
传两个参数时,第一位表示从第几位开始截,第二位表示截取到第几位。

和splice()作对比,首先splice()会改变原数组,新生成的数组是剩下的值,而slice()不会改变原数组,返回值都是截取的值。

var arr = [1,2,3,4,5];
var arr1 = [1,2,3,4,5];
 var arr2 = [1,2,3,4,5];
 var newArr = arr.slice(1);      //newArr = [2, 3, 4, 5]
 var newArr1 = arr.splice(1);     //newArr1 = [2, 3, 4, 5]
 var newArr2 = arr1.slice(1,3);    //newArr = [2, 3]
 var newArr3 = arr1.splice(1,3);   //newArr = [2, 3, 4]
 var newArr4 = arr2.splice(1,3,4)    //newArr = [2, 3, 4]

可以发现,当slice()和splice()的参数为1个时,都表示从当前位置到末尾位置截取。而当参数为两个时,slice()的第一位表示截取数据的起始位置,第二位表示截取数据的末尾位置,并不会包含该位置。splice()的第一位表示截取位置的起始位置,第二位则表示截取了几位。

(3)join():表示将数组中的数据根据指定的符号连接成字符串;如果不传参数则默认按逗号拼接。

var arr = [1,2,3,4,5];
var newArr = arr.join("-");         //"1-2-3-4-5"
 var newArr1 = arr.join("~");          //"1~2~3~4~5"
var str = "abc",
      str1 = "def",
       str2 = "ghi",
       str3 = "jkl",
       str4 = "mnopq";
   var arr = [str,str1,str2,str3,str4];
   var newArr = arr.join("");    //"abcdefghijklmnopq"

(4)split():和join相对应的是split方法,split不是数组上的方法,而是字符串上的方法。它可以将字符串拆成数组。

var str = "1-2-3-4-5";
var newArr = str.split("-");   //["1", "2", "3", "4", "5"]

(5)toString():将数组转化为字符串

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

猜你喜欢

转载自blog.csdn.net/superyuan567/article/details/84989976