基础系列 - 数组常用方法及实现

178 阅读1分钟

数组常用方法

1、push
  • 数组结尾添加值,返回新数组长度,原数组改变
let arr = []
arr.push(1,5,[2,3])
// 返回值 3, arr = [1,5,[2,3]]
实现方法
Array.prototype.newPush = function(){
    for(var i = 0;i < arguments.length; i++) {
        this[this.length] = arguments[i]
    }
    return this.length
}
2、pop
  • 从数组的最后去除掉一个元素, 返回被去除的那个元素,原数组改变
let arr = [12]
arr.pop()
// 返回值 2, arr = [1]
实现方法
Array.prototype.newPop = function(){
    let delval = this[this.length-1]
    this.length--
    return delval
}
3、unshift
  • 往数组前面加,返回添加后数组的长度,原数组改变
let arr = [12]
a.unshift(3,{})
// 返回值 4, arr = [3, {}, 1, 2]
实现方法
  • 参考push
4、shift
  • 从数组前面去掉一个元素,返回去掉的值,原数组改变
let arr = [12]
a.shift()
// 返回值 1, arr = [2]
实现方法
  • 参考pop
5、reverse
  • 翻转数组中的元素,原数组改变
let arr = [12]
a.reverse()
// 返回值 [2,1], arr = [2,1]
实现方法
  • 待完善
6、sort
  • 数组排序,默认升序排序,原数组改变
let arr = [4,7,3,2]
a.reverse()
// 返回值 [2, 3, 4, 7], arr = [2, 3, 4, 7]

a.sort(function(a,b){ return a-b })  // 升序排序
a.sort(function(a,b){ return b-a })  // 降序排序
实现方法
  • 待完善
7、splice
  • 删除数组中从某一位置开始的某几个元素,并且在删除的位置添加指定的元素,返回被截取的元素数组
let arr = [3, 9, 7]
a.splice(1,1,12,3,4)
// 返回值 [9], arr = [3, 12, 3, 4, 7]
实现方法
  • 待完善
8、slice
  • 截取数组中某位置(包含)到某位置(不包含)的一段数字,返回截取的数组,原数组不改变
  • 接收负数参数,表示倒着数
  • 只传一个参数,表示从那个位置开始一直到结束
let arr = [3, 9, 7]
a.slice(1,2)
// 返回值 [9], arr = [3, 9, 7]
实现方法
  • 待完善
9、slice
  • 截取数组中某位置(包含)到某位置(不包含)的一段数字,返回截取的数组,原数组不改变
  • 接收负数参数,表示倒着数
  • 只传一个参数,表示从那个位置开始一直到结束
let arr = [3, 9, 7]
a.slice(1,2)
// 返回值 [9], arr = [3, 9, 7]
实现方法
  • 待完善
10、filter
  • 返回值满足条件的数组,原数组不变
let arr = [1,2,3,4]
a.fliter((v)=>{ return v > 2 })
// 返回值 [3,4], arr = [1,2,3,4]
实现方法
Array.prototype.newFilter = function(fn){
    let newArr = []
    for(let i = 0; i < this.length; i++) {
        if(fn(this[i])) {
            newArr.push(this[i])
        }
    }
    return newArr
}
11、filter
  • 返回值满足条件的数组,原数组不变
let arr = [1,2,3,4]
a.fliter((v)=>{ return v > 2 })
// 返回值 [3,4], arr = [1,2,3,4]
实现方法
Array.prototype.newFilter = function(fn){
    let newArr = []
    for(let i = 0; i < this.length; i++) {
        if(fn(this[i])) {
            newArr.push(this[i])
        }
    }
    return newArr
}
12、every
  • 测试数组中每一项是否都满足一个指定条件,都满足的话,返回true,给定数组为空数组的话,也返回true
13、reduce
  • 根据指定值,可以通过循环数组对每个值进行处理,并拿到处理结果。
实现方法
reduce实现map

持续更新中...