数组的方法

如何学习一个方法?    —— 方法的作用、方法的参数、方法的返回值、代码示例(完成一个demo)


继承自 Object 的方法

数组是一种特殊的对象,每个对象都继承了 Object 的 toString()、toLocalString() 和 valueOf() 方法。


[ toString() ] 把数组转换成字符串,用逗号分隔每一项

// 该方法的返回值与不使用任何参数调用join()方法返回的字符串相同

   [1,2,3].toString();   // '1,2,3'
   ['a','b','c'].toString();   // 'a,b,c'
   [1,[2,'c']].toString();   // '1,2,c'

 [ valueOf() ] 返回数组对象本身

var a = [1, 2, 3];
console.log(a.valueOf());   // [1, 2, 3]
console.log(a.valueOf() instanceof Array);   // true

数组的常用方法?!

1. 栈操作(先进后出)

push()

pop()   // 取出数组中的最后一项,修改length属性

2. 队列操作(先进先出)

push()

shift()   // 取出数组中的第一个元素,修改length属性

unshift()   // 在数组最前面插入项,返回数组的长度

3. 排序方法

reverse()   // 翻转数组

sort()   // 即使是数组soft也是根据字符,从小到大排序

[ 带参数的 sort ]

 

4. 操作方法

concat()   // 把参数拼接到当前数组

slice()   // 从当前数组中截取新的数组,不影响原数组

splice()   // 删除或替换当前数组的某些项,参数 [start,end)

5. 位置方法

indexOf()

lastIndexOf()   // 如果没有找到返回 -1

6. 迭代方法

every()

filter()

forEach()

map()

some()

7. 将数组的所有元素连接到一个字符串中

join()

清空数组

方式 1(推荐):arr = [];

方式 2:arr.length = 0;

方法 3:arr.slice(0,arr.length);

复制数组

(1)push

function copyArray(arr){
    var result = [];
    for(var i = 0; i < arr.length; i++){
        result.push(arr[i]);
    }
    return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

(2)join                // 缺点:数组中的项全部变为字符串形式

function copyArray(arr){
    var result = [];
    result = arr.join().split(',');
    return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //['1','2','3']
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //['1','2','3',4]

(3)concat

function copyArray(arr){
    var result = [];
    result = arr.concat();
    return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

(4)slice

function copyArray(arr){
    var result = [];
    result = arr.slice();
    return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

(5)深拷贝          // 以上方法实现的仅是数组的浅拷贝,如果要实现数组的深拷贝,需要使用递归方法

function copyArray(arr,result){
    var result = result || [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] instanceof Array){
            result[i] = [];
            copyArray(arr[i],result[i]);
        }else{
            result[i] = arr[i];
        }           
    }
    return result;
}

var obj1=[1,2,[3,4]];
var obj2=copyArray(obj1);
console.log(obj1[2]); //[3,4]
console.log(obj2[2]); //[3,4]
obj2[2].push(5);
console.log(obj1[2]); //[3,4]
console.log(obj2[2]); //[3,4,5]