JavaScript手写数组的常用函数总结

接下来我将从以下三个方面详细讲解“JavaScript手写数组的常用函数总结”的完整攻略:

  1. 常用函数列表
  2. 函数的实现
  3. 示例说明

1. 常用函数列表

下面是JavaScript手写数组的常用函数列表,包括函数名称、参数和作用:

函数名称 参数 作用
push element 在数组末尾添加一个元素并返回新的长度
pop 删除数组末尾的元素并返回该元素
shift 删除数组开头的元素并返回该元素
unshift element 在数组开头添加一个元素并返回新的长度
splice index, num, element1, element2, ... 在指定位置插入/删除元素并返回被删除的元素组成的新数组
concat array1, array2, ... 连接多个数组并返回合并后的新数组
slice start, end 从指定位置截取数组并返回新的数组
map callback 根据回调函数处理每个元素并返回新的修改后的数组
filter callback 根据回调函数过滤出符合条件的元素并返回新的数组
reduce callback, initValue 根据回调函数对数组元素进行归纳计算并返回计算结果

2. 函数的实现

接下来我们对这些常用函数进行手写实现。

push

Array.prototype.push1 = function(...args) {
  for (let i = 0; i < args.length; i++) {
    this[this.length] = args[i];
  }
  return this.length;
}

pop

Array.prototype.pop1 = function() {
  if (this.length === 0) return undefined;
  const res = this[this.length - 1];
  delete this[this.length - 1];
  this.length--;
  return res;
}

shift

Array.prototype.shift1 = function() {
  if (this.length === 0) return undefined;
  const res = this[0];
  for (let i = 0; i < this.length - 1; i++) {
    this[i] = this[i+1];
  }
  delete this[this.length - 1];
  this.length--;
  return res;
}

unshift

Array.prototype.unshift1 = function(...args) {
  const newLength = args.length + this.length;
  for (let i = newLength - 1; i >= args.length; i--) {
    this[i] = this[i - args.length];
  }
  for (let i = 0; i < args.length; i++) {
    this[i] = args[i];
  }
  return newLength;
}

splice

Array.prototype.splice1 = function(start, num, ...args) {
  let res = [];
  const deleteCount = Math.min(num, this.length - start);
  for (let i = start; i < start + deleteCount; i++ ) {
    res.push(this[i]);
    delete this[i];
  }
  for (let i = this.length - 1; i >= start + deleteCount; i--) {
    this[i + args.length - deleteCount] = this[i];
  }
  for (let i = 0; i < args.length; i++) {
    this[start + i] = args[i];
  }
  this.length = this.length - deleteCount + args.length;
  return res;
}

concat

Array.prototype.concat1 = function(...args) {
  const res = [];
  for (let i = 0; i < this.length; i++) {
    res.push(this[i]);
  }
  for (let i = 0; i < args.length; i++) {
    if (Array.isArray(args[i])) {
      for (let j = 0; j < args[i].length; j++) {
        res.push(args[i][j]);
      }
    } else {
      res.push(args[i]);
    }
  }
  return res;
}

slice

Array.prototype.slice1 = function(start, end) {
  const res = [];
  const startIndex = start >= 0 ? start : Math.max(this.length + start, 0);
  const endIndex = end ? end : this.length;
  for (let i = startIndex; i < endIndex; i++) {
    res.push(this[i]);
  }
  return res;
}

map

Array.prototype.map1 = function(callback) {
  const res = [];
  for (let i = 0; i < this.length; i++) {
    res.push(callback(this[i], i, this));
  }
  return res;
}

filter

Array.prototype.filter1 = function(callback) {
  const res = [];
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      res.push(this[i]);
    }
  }
  return res;
}

reduce

Array.prototype.reduce1 = function(callback, initValue) {
  let res = initValue !== undefined ? initValue : this[0];
  let startIndex = initValue !== undefined ? 0 : 1;
  for (let i = startIndex; i < this.length; i++) {
    res = callback(res, this[i], i, this);
  }
  return res;
}

3. 示例说明

下面是两个手写数组函数的示例说明:

例子1:手写一个数组扁平化函数

function flatten(arr) {
  return arr.reduce1((prev, cur) => {
    return prev.concat(Array.isArray(cur) ? flatten(cur) : [cur]);
  }, []);
}

console.log(flatten([1, 2, [3, 4], [5, [6, 7]]])); // [1, 2, 3, 4, 5, 6, 7]

例子2:手写一个过滤偶数的数组函数

function filterEven(arr) {
  return arr.filter1(item => item % 2 === 0);
}

console.log(filterEven([1, 2, 3, 4, 5, 6])); // [2, 4, 6]

至此,“JavaScript手写数组的常用函数总结”的完整攻略就讲解完了,希望能对大家有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript手写数组的常用函数总结 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript find()方法及返回数据实例

    下面是关于JavaScript中find()方法及返回数据的完整攻略,包括方法的介绍、语法、参数、返回值和示例说明。 find()方法介绍 JavaScript中的find()方法是ES6中新增加的数组方法之一,用于返回符合条件的第一个数组元素,如果没有符合条件的元素则返回undefined。 find()方法的语法 array.find(function(…

    JavaScript 2023年5月28日
    00
  • 收集的一些Array及String原型对象的扩展实现代码

    收集的一些Array及String原型对象的扩展实现代码,是指在JavaScript中对Array和String原型对象进行扩展,添加新的方法或修改原方法的实现代码集合。 下面是针对该攻略的详细解释和过程: 了解JavaScript中的原型对象 在JavaScript中,每个对象都有一个原型对象。原型对象是另一个对象,其中包含一组可共享的属性和方法。在面向对…

    JavaScript 2023年6月10日
    00
  • js实现一个逐步递增的数字动画

    JS实现逐步递增数字动画的完整攻略示例: 步骤一: HTML结构首先,我们需要在HTML中创建一个目标容器来显示数字动画的值,如 ,这是一个示例结构,可以根据实际情况进行修改。 步骤二: CSS样式可以根据自己的需求进行样式设计,这里建议将目标容器与数字本身分离,用一个样式来设置它们的样式。如: .num { font-size: 40px; color: …

    JavaScript 2023年6月10日
    00
  • JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码

    JavaScript使用escape()、encodeURI()和decodeURI()实现URI编码解码 URI是统一资源标识符,URI包含了绝对URI和相对URI两种方式。其中,绝对URI包含协议、主机名、文件名和查询参数,而相对URI只需要相对于当前文件所属的路径进行命名即可。 URI编码就是为了解决URI含有特殊字符而无法被正确显示、传递和处理的问题…

    JavaScript 2023年5月20日
    00
  • Javascript Date constructor 属性

    以下是关于JavaScript Date对象的constructor属性的完整攻略。 JavaScript Date对象的constructor属性 JavaScript Date对象的constructor属性返回对创建该对象的构造函数的引用。该属性可用于检查对象是否为Date类型。 下面是使用Date对象的constructor属性的示例: var da…

    JavaScript 2023年5月11日
    00
  • Javascript继承(上)——对象构建介绍

    Javascript继承(上)——对象构建介绍 概述 在Javascript中,继承是一种重要的特性。通过继承,我们可以复用已有代码,并且在不改变原有代码的前提下,扩展和改进功能。 本文将介绍Javascript中的对象构建方式,从而为后续讲解继承做好铺垫。 对象创建 在Javascript中可以通过以下方式创建对象: 1.对象字面量 对象字面量是一种简单的…

    JavaScript 2023年5月27日
    00
  • JavaScript 开发规范要求(图文并茂)

    JavaScript开发规范要求(图文并茂) 简介 JavaScript是一门非常灵活的语言,灵活性也为其带来了使用难度,所以为了保证代码的品质和可维护性,一些好的JavaScript开发规范是必不可少的。 为此,本文将详细介绍旨在提高JavaScript代码品质和可维护性的开发规范要求。 代码组织 引入顺序 首先,我们应该根据引入类型将脚本分成3个部分: …

    JavaScript 2023年5月27日
    00
  • javascript中删除指定数组中指定的元素的代码

    当需要从JavaScript中的数组中删除特定的元素时,可以使用以下几种方法: 1.使用splice()方法 splice()方法可用于更改数组的内容,通过指定要更改的内容和其更改方式进行更改。在这种情况下,我们可以将其用于从数组中删除特定元素。 使用方式如下: array.splice(index, howMany[, element1[, …[, e…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部