带你读《现代Javascript高级教程》四、JavaScript数组(2)

简介: 带你读《现代Javascript高级教程》四、JavaScript数组(2)

带你读《现代Javascript高级教程》四、JavaScript数组(1)https://developer.aliyun.com/article/1349685?groupCode=tech_library


3. 数组属性

JavaScript数组还有一些常用的属性,用于描述和操作数组的特性和状态。

 

  • length:返回数组的长度。
  • constructor:返回创建数组对象的原型函数。
  • prototype:数组对象的原型对象,用于添加新的方法和属性。

这些属性可以帮助我们了解数组的结构和信息,以便更好地处理和操作数组。

4. 实现数组API

为了更好地理解数组的方法和实现原理,我们可以尝试自己模拟实现一些数组API的方法。以下是一些常用的数组方法的简单模拟实现示例:

实现添加和删除元素的方法

// 模拟实现 push() 方法Array.prototype.myPush = function(...elements) {
  const len = this.length;
  let i = 0;
  while (i < elements.length) {
    this[len + i] = elements[i];
    i++;
  }
  return this.length;};
// 模拟实现 pop() 方法Array.prototype.myPop = function() {
  if (this
.length === 0) return undefined;
  const lastElement = this[this.length - 1];
  delete this[this.length - 1];
  this.length--;
  return lastElement;};
// 模拟实现 unshift() 方法Array.prototype.myUnshift = function(...elements) {
  const originalLength = this.length;
  for (let i = originalLength - 1; i >= 0; i--) {
    this[i + elements.length] = this[i];
  }
  for (let i = 0; i < elements.length; i++) {
    this[i] = elements[i];
  }
  this.length = originalLength + elements.length;
  return this.length;};
// 模拟实现 shift() 方法Array.prototype.myShift = function() {
  if (this.length === 0) return undefined;
  const firstElement = this[0];
  for (let i = 0; i < this.length - 1; i++) {
    this[i] = this[i + 1];
  }
  delete this[this.length - 1];
  this.length--;
  return firstElement;};
// 示例使用const myArray = [1, 2, 3];
console.log(myArray.myPush(4, 5));    // 输出:5
console.log(myArray);                  // 输出:[1, 2, 3, 4, 5]
console.log(myArray.myPop());        // 输出:5
console.log(myArray);                  // 输出:[1, 2, 3, 4]
console.log(myArray.myUnshift(0)); // 输出:5
console.log(myArray);                  // 输出:[0, 1, 2, 3, 4]
console.log(myArray.myShift());     // 输出:0
console.log(myArray);                  // 输出:[1, 2, 3, 4]

实现修改和访问元素的方法

// 模拟实现 splice() 方法Array.prototype.mySplice = function(startIndex, deleteCount, ...elements) {
  const removedElements = [];
  const len = this.length;
  const deleteEndIndex = Math.min(startIndex + deleteCount, len);
  const moveCount = len - deleteEndIndex;
  // 保存删除的元素
  for (let i = startIndex; i < deleteEndIndex; i++) {
    removedElements.push(this[i]);
  }
  // 移动剩余元素
  for (let i = 0; i < moveCount; i++) {
    this[startIndex + deleteCount + i] = this[startIndex + deleteCount + i + moveCount];
  }
  // 插入新元素
  for (let i = 0; i < elements.length; i++) {
    this[startIndex + i] = elements[i];
  }
  // 更新长度
  this.length = len - deleteCount + elements.length;
  return removedElements;};
// 示例使用const myArray = [1, 2, 3, 4, 5];
console.log(myArray.mySplice(2, 2, 'a', 'b')); // 输出:[3, 4]
console.log(myArray);                             // 输出:[1, 2, 'a', 'b', 5]


带你读《现代Javascript高级教程》四、JavaScript数组(3)https://developer.aliyun.com/article/1349683?groupCode=tech_library

相关文章
|
3月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
51 2
2024年5月node.js安装(winmac系统)保姆级教程
|
4月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
62 2
|
4月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
79 3
|
4月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
48 0
|
4月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
73 1
|
4月前
|
JavaScript 前端开发 索引
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
62 0
|
4月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
65 4
|
4月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
67 4
|
4月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
34 0
|
4月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
46 5

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    45
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55