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

yizhihongxing

接下来我将从以下三个方面详细讲解“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 寻址,闭包,对象模型和相关问题

    以下是关于“细品 JavaScript 寻址、闭包、对象模型和相关问题”的详细攻略。 一、JavaScript 寻址 JavaScript 寻址是指在访问对象的属性或方法时,JavaScript 引擎会自动查找对象及其原型链,然后返回相应属性或方法的值或引用。具体实现方式有点类似于链表,会一层层向上查找直到找到目标属性或方法。 例如,我们可以创建一个对象 p…

    JavaScript 2023年6月10日
    00
  • javascript window.onerror事件学习新收获

    JavaScript Window.onerror事件学习新收获 什么是window.onerror事件? window.onerror 事件是在浏览器捕获到一个未处理的 JavaScript 错误时触发的事件。可以用来监听页面 JS 错误,并进行相应的处理,如记录错误信息、提示错误、上报错误等。 如何使用window.onerror事件? 在页面中添加以下…

    JavaScript 2023年5月28日
    00
  • .NET异步编程模式的三种类型介绍

    当今的软件开发需要在面对并发的任务时能够高效地处理数据和事件。异步编程模式是一种提高程序效率和性能的方式,尤其是针对I/O密集型的应用程序。在.NET平台上,异步编程模式被广泛使用,并且有多种实现方式,下面我们将介绍.NET异步编程模式的三种类型。 1. Async/Await模式 异步编程的目标是提高程序的效率,通过让程序在某个任务执行的同时可以执行其他任…

    JavaScript 2023年5月28日
    00
  • JavaScript Element对象

    Element对象是JavaScript中DOM(文档对象模型) API的核心对象之一。该对象代表了HTML或XML文档中的一个元素节点。Element对象提供了许多属性和方法,可以访问和操作元素节点的各种属性和特征,例如元素的标签名、类名、ID、样式、子节点等等。 以下是Element对象的一些常用属性和方法: 属性: element.tagName:返回…

    Web开发基础 2023年3月30日
    00
  • 当ES6遇上字符串和正则表达式

    当ES6遇上字符串和正则表达式,能够大大提高我们的编程效率,以下内容将详细讲解ES6与字符串、正则表达式的操作。 字符串 1. 模板字符串 ES6中,我们可以使用模板字符串来更方便的输出变量。 模板字符串用反引号(`)来表示,用${}来表示变量。 示例: const name = ‘小明’; const age = 18; console.log(`我叫${…

    JavaScript 2023年6月11日
    00
  • layui原生表单验证的实例

    下面我来详细讲解一下“layui原生表单验证的实例”的完整攻略。 简介 layui是一款经典的前端UI框架,提供了丰富的组件和插件,其中包括表单验证组件。通过layui原生的表单验证可实现表单的实时验证、提交前的总体验证等功能。 示例1 假设我们有一个简单的表单,包含了姓名(name)、年龄(age)、邮箱(email)、密码(password)这四个输入项…

    JavaScript 2023年6月10日
    00
  • jquery中object对象循环遍历的方法

    下面是关于jquery中object对象循环遍历的方法的完整攻略。 标题 我们先来看一下这个话题的标题应该如何起: jquery中object对象循环遍历的方法 介绍 在开发前端页面时,经常需要对json数据或者接口返回的数据进行遍历操作。那么,在jquery中,如何对object对象进行循环遍历呢?接下来,我们将详细讲解一下这个问题。 方法一 我们先来看一…

    JavaScript 2023年5月27日
    00
  • js对字符串和数字进行加法运算的一些情况

    关于JavaScript中字符串和数字进行加法运算的情况,我们需要先了解一下类型转换的概念。 JavaScript中有两种类型转换,分别是隐式类型转换和显式类型转换。隐式类型转换是指不通过代码进行类型转换的情况下,JavaScript自动将数据转换为指定类型。例如,在进行加法运算时,如果有一个操作数为数字,另一个操作数为字符串,JavaScript会将字符串…

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