reverse方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。

语法:arr.reverse()

下面自己来实现:

Array.prototype.myReverse=function(){if(this instanceof Array){//数组var len=this.length,i=len-1;var res=[];//定义一个数组for(i;i>=0;i--){res.push(this[i]);}this.length=0;//清空原数组Array.prototype.splice.apply(this,[0,0,res]);//将新结果插入到原数组中,这里用apply方法很适用}else{//处理类数组var keys=[],values=[];var len=this.length;delete this['length'];for(var k in this){keys.push(k);values.push(this[k]);}for(var i=0,l=keys.length;i<l;i++){this[keys[i]]=values[len-1-i];}this['length']=len;}return this;//返回结果
}

测试一下 :

var arr = [1,3,5,7,9]
var newArr = arr.myReverse();
console.log("原数组:"+arr);
console.log("新数组:"+newArr);

输出:

原数组:9,7,5,3,1
新数组:9,7,5,3,1

测试一下类数组:

var arr2= {0: 1, 1: 2, 2: 3, length:3};
var newArr2=Array.prototype.myReverse.call(arr2);
console.log(arr2);
console.log(newArr2);

输出:

{0: 3, 1: 2, 2: 1, length: 3}
{0: 3, 1: 2, 2: 1, length: 3}

欢迎指正交流!

原生js源码之Array数组reverse方法相关推荐

  1. 原生js源码之Array数组的every方法

    every 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试,全部通过测试就返回true,一旦有一个元素不通过测试则立马返回false. 下面自己实现一个every var arr = [1 ...

  2. Vue.js 源码分析(五) 基础篇 方法 methods属性详解

    methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head&g ...

  3. 从template到DOM(Vue.js源码角度看内部运行机制)

    写在前面 这篇文章算是对最近写的一系列Vue.js源码的文章(github.com/answershuto-)的总结吧,在阅读源码的过程中也确实受益匪浅,希望自己的这些产出也会对同样想要学习Vue.j ...

  4. Vue.js 框架源码与进阶 - Vue.js 源码剖析 - 响应式原理

    文章目录 一.准备工作 1.1 Vue 源码的获取 1.2 源目录结构 1.3 了解 Flow 1.4 调试设置 1.5 Vue 的不同构建版本 1.6 寻找入口文件 1.7 从入口开始 二.Vue ...

  5. php tire树,Immutable.js源码之List 类型的详细解析(附示例)

    本篇文章给大家带来的内容是关于Immutable.js源码之List 类型的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.存储图解 我以下面这段代码为例子,画 ...

  6. 【Vue.js源码解析 一】-- 响应式原理

    前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:建议通过左侧导航栏进行阅读 课程目标 Vue.js 的静态成员和实例成员初始化过程 首次渲染的过程 数据响应式原理 – 最核心的特性之一 准备工作 ...

  7. JavaScript数字运算必备库——big.js源码解析

    概述 在我们常见的JavaScript数字运算中,小数和大数都是会让我们比较头疼的两个数据类型. 在大数运算中,由于number类型的数字长度限制,我们经常会遇到超出范围的情况.比如在我们传递Long ...

  8. 【笔记-vue】《imooc-vue.js高仿饿了么》、《imooc-vue 音乐app》、《imooc-vue.js源码全方位解析》

    20170709 - 20171128:<imooc-vue.js高仿饿了么> 一.第一章 课程简介 1-1课程简介 1.需求分析-脚手架工具-数据mock-架构设计-代码编写-自测-编译 ...

  9. Evil.js源码解读

    https://github.com/duo001/evil.js 火爆全网的 Evil.js 源码解读 火爆全网的 Evil.js 源码解读 什么?黑心996公司要让你提桶跑路了? 想在离开前给你们 ...

最新文章

  1. 100c之37:爱因斯坦问题
  2. 如何把纯真ip数据库导入到MySQL数据表中
  3. Java split(“\\s+“) 和 split(“+“) 有什么区别
  4. java 销毁线程_线程 学习教程(一): Java中终止(销毁)线程的方法
  5. 来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor
  6. 内存泄露Lowmemorykiller分析
  7. WHAT IS PYTORCH
  8. Docker 概念-1
  9. JQuery使用deferreds串行多个ajax请求
  10. 2021-04-25
  11. BLOB/TEXT column 'name' used in key specification without a key length
  12. 金融信创爆发年,优炫数据库高可用高性能解决方案
  13. 滴滴23届校招薪资正式开奖!算法岗最高 55w
  14. 【PdgCntEditor】解决PDF的目录页码和PDF实际页码不一致的问题,书签页码偏移页面偏移功能,PDF页面标签的添加
  15. MATLAB——求系统的零状态响应
  16. biopython--PDB.polypepide
  17. js点击图片打印图像
  18. 机考怎么作弊_公司想用电脑组织机考,但是人手有限,不能人工监考,可不可以使用电脑控制防止考试作弊呢?...
  19. paramiko.ssh_exception.SSHexception:Server connection dropped:
  20. 微服务框架-基础框架

热门文章

  1. java-php-python-ssm选课排课系统计算机毕业设计
  2. EasyExcel 单元格替换
  3. ZYNQ-QSPI Flash读写操作
  4. js生成随机数概率算法
  5. Java流程控制语序 循环
  6. android 11.0添加开机铃声
  7. [Log4j基础]-- 缺少log4j包或包版本冲突报错
  8. QT QHash的一点信息异常?BUG?
  9. Jenkins自动清理构建历史
  10. python用vim做ide的语法检查