数组作为常用的数据结构,在各种需要数据的场景中我们都能够看到,为了巩固自己的基础以及学习。为此记录下数组的几种常用方法以及用原生实现的方案。

join

使用方法


join()方法将一个数组的所有元素连接成一个字符串并返回这个字符串

let arr = [2,0,1,9]  

arr.join('-')  //result '2-0-1-9'  

原生实现

Array.prototype.join = function(char){
    let result = this[0] || '' //获取调用数组的第一个值
    let length = this.length //获取调用数组的length
    for(let i = 1; i<length - 1; i++){
        result += char + this[i]
    }
    return result
}

slice

使用方法


slice() 方法可从已有的数组中返回选定的元素,它有两个参数,从begin截取到end(不包括end)

let arr = [2,0,1,9]  

arr.slice(1,3)  //result '[0,1]'  

原生实现

Array.prototype.slice = function(begin,end){
    let result = []
    begin = begin || 0
    end = end || this.length
    for(let i = begin; i<end; i++){
        result.push(this[i])
    }
    return result
}

这个实现方式还是有一点点缺憾,并不支持传递负数参数

sort

使用方法


sort() 方法用原地算法对数组的元素进行排序,并返回数组。

let arr = [2,0,1,9]  

arr.sort()  //result '[0,1,2,9]'  

原生实现

Array.prototype.sort = function(fn){
    fn = fn || (a,b) => a-b
    let roundCount = this.length - 1
    for(let i = 0; i < roundCount; i++){
        let minIndex = this[i]
        for(let k = i + 1; k < this.length; k++){
            if(fn.call(null,this[k],this[i]) < 0){
                [this[i], this[k]] = [this[k],this[i]]
            }
        }
    }
}