自实现数组的各种方法

Posted REMZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自实现数组的各种方法相关的知识,希望对你有一定的参考价值。

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

Array.prototype.myConcat = function () {
  let result = []
  
  result.push(...this)
  
  for(let b of arguments) {
    if(b instanceof Array) {
      for(let item of b) {
        result.push(item)
      }
    }
    else {
      result.push(b)
    }
  }
  return result
}

copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。

Array.prototype.myCopyWithin = function(target, start = 0, end = this.length) {
  (end > this.length) && (end = this.length)
  if(start > end || target > end) return false
 let copy = []
  while(start <= end) {
    copy.push(this[start])
    start++
  }
  let index = 0
 while (target <= copy.length) {
    this[target] = copy[index]
    index++
    target++
  }
  return this
}

every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。

Array.prototype.myEvery = function (fn) {
  for(let a of this) {
    for(let a=0; a< this.length; a++) {
      if(!fn(this[a],a,this)) {
        return false
      }
    }
    return true
    }
}

fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。

Array.prototype.myFill = function(target, start = 0, end = this.length) {
  (end > this.length) && (end = this.length)
  if(start > end || target > end) return false
  while (start <= end) {
    this[start] = target
    start++
  }
  return this
}

filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

Array.prototype.myFilter = function(fn) {
  let result = []
  for(let a=0; a< this.length; a++) {
    if(fn(this[a],a,this)) {
      result.push(this[a])
    }
  }
  return result
}

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 [undefined]。

Array.prototype.myFind = function(fn) {
    for(let a=0; a< this.length; a++) {
        if(fn(this[a],a,this)) {
          return this[a]
        }
      }
    return undefined
 }

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。

Array.prototype.myFindIndex = function(fn) {
  for(let a=0; a< this.length; a++) {
    if(fn(this[a],a,this)) {
      return a
    }
  }
  return -1
}

includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

Array.prototype.myIncludes = function (value, index = 0) {
  if(index < 0) {
    index = Math.max(index + this.length,0)
  }
  while (index < this.length) {
    if(this[index] === value) {
      return true
    }
    index++
  }
  return false
}

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

Array.prototype.myIndexOf = function (value, index = 0) {
  if(index < 0) {
    index = Math.max(index + this.length,0)
  }
  while (index < this.length) {
    if(this[index] === value) {
      return index
    }
    index++
  }
  return -1
}

join() 方法将一个数组(或一个[类数组对象])的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。

如果元素是undefined或者null, 则会转化成空字符串。

Array.prototype.myJoin = function (separator = \',\') {
  let result = \'\'
 for(let a = 0; a < this.length; a++) {
    if(this[a] == null || this[a] == undefined) {
      result += \'\'
    } else {
      result += this[a]
    }

    if(a < this.length -1) {
      result += separator
    }
  }
  return result
}

lastIndexOf() 方法返回指定元素(也即有效的 javascript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。

Array.prototype.myLastIndexOf = function (value, fromIndex= 0) {
  let index = this.length-1
  if(fromIndex < 0) {
    fromIndex = Math.max(index+this.length, 0)
  }
  while (index >= fromIndex) {
    if(this[index] === value) {
      return index
    }
    index--
  }
  return -1
}

pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。

Array.prototype.myPop = function () {
  let result
  if(this.length == 0) {
    return undefined
 } else {
    result = this[this.length-1]
    this.length = this.length - 1
    return result
  }
}

push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

Array.prototype.myPush = function () {
  for(let a = 0; a< arguments.length; a++) {
    this[this.length] = arguments[a]
  }
  return this.length
}

后续待更

以上是关于自实现数组的各种方法的主要内容,如果未能解决你的问题,请参考以下文章

自实现数组的各种方法

vbscript 各种自定义代码片段 - 有关详细信息,请参阅注释

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

自定义对话框片段

VS中添加自定义代码片段——偷懒小技巧

IOS开发-OC学习-常用功能代码片段整理