JS 数组的常用操作

常用方法


//属性
constructor    返回对创建此对象的数组函数的引用。
length         设置或返回数组中元素的数目。
prototype      使您有能力向对象添加属性和方法。


//方法
//concat()连接两个或更多的数组,并返回结果。
arrayObject.concat(arrayX,arrayX,......,arrayX)

//join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔,separator可以不填。
arrayObject.join(separator)

//unshift()    向数组的开头添加一个或更多元素,并返回新的长度。
arrayObject.unshift(newelement1,newelement2,....,newelementX)

//push()向数组的末尾添加一个或更多元素,并返回新的长度。
arrayObject.push(newelement1,newelement2,....,newelementX)

//shift()删除并返回数组的第一个元素
arrayObject.shift()

//pop()删除并返回数组的最后一个元素
arrayObject.pop()

//reverse()颠倒数组中元素的顺序。该方法会改变原来的数组,而不会创建新的数组。
arrayObject.reverse()

//sort()对数组的元素进行排序
arrayObject.sort(sortby)

//slice()从某个已有的数组返回选定的元素的新数组,start 必需,end 可选
arrayObject.slice(start,end)

//splice()删除元素,并向数组添加新元素。
arrayObject.splice(index,howmany,item1,.....,itemX)
arr.splice(2,0,"William")  //从第三个开始,删除0个元素,并从第三个位置添加一个William

//toSource()返回该对象的源代码。
object.toSource()

//toString()把数组转换为字符串,并返回结果。返回值与没有参数的 join()方法返回的字符串相同。
arrayObject.toString()


不常用方法


//toLocaleString()把数组转换为本地数组,并返回结果。
arrayObject.toLocaleString()


//valueOf()返回数组对象的原始值
arrayObject.valueOf()


实例 数组去重


// 方法1
Array.prototype.unique = function(){ 
    var arr = []; 
    for(var i=0,i=this.length;i<len;i++){ 
        if(arr.indexOf(this[i]) == -1){ 
            arr.push(this[i]);
        } 
    } 
    return arr; 
    
}; 
console.log([1,2,3,2,5,6,3].unique()); //[1, 2, 3, 5, 6]


//方法2
Array.prototype.unique = function(){ 
    var n = {}, 
    r=[]; //n为哈希表,r为临时数组
    //遍历当前数组 
    for(var i = 0; i < this.length; i++) { 
        //如果hash表中没有当前项 
        if (!n[this[i]]){ 
            n[this[i]] = true; //存入哈希表 
            r.push(this[i]); //把当前数组的当前项push到临时数组里面 
        } 
    } 
    return r; 
} 
console.log([1,2,3,2,5,6,3].unique());//[1, 2, 3, 5, 6] 


//方法3
Array.prototype.unique = function(){ 
    var arr = [this[0]];//结果数组 
    //从第二项开始遍历
    for(var i=1;i<this.length;i++){ 
        if(this.indexOf(this[i]) == i){ 
            //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
                那么表示第i项是重复的,忽略掉。否则存入结果数组 
            arr.push(this[i]); 
        } 
    } 
    return arr; 
} 
console.log([1,2,3,4,2,3,4].unique());// [1, 2, 3, 4] 


//方法4
var arr = [4,5,3,2,3,4,5,1]; 
function fn(num){ 

    var res = num.filter(function(item,index,array){
        //num.indexOf(item)将会返回元素在数组第一次出现的位置 
        return num.indexOf(item) === index;
        //对于多次出现的元素,除第一次外,其他情况都返回false 
    }); 
    return res; 
} 
console.log(fn(arr));//[4, 5, 3, 2, 1] 


//方法5
function unique(a) { 
    var obj = {}; 
    
    //filter会返回true的项组成的成员 
    return a.filter(function(item) {
        return obj.hasOwnProperty(item) ? false : (obj[item] = true); 
    }); 
} 

var a = [1, 1, 3, 2, 1, 2, 4]; 
var res = unique(a); 
console.log(res); // [1, 3, 2, 4]