JS数组方法shift()、unshift()用法实例分析


Posted in Javascript onJanuary 18, 2020

本文实例讲述了JS数组方法shift()、unshift()用法。分享给大家供大家参考,具体如下:

shift()方法

1. 定义:从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
2. 语法: arr.shift()
3. 参数:/
4. 返回值:从数组中删除的元素(当数组为空时返回undefined)。

代码如下:

方法一:

var arr1 = [1, 2, 3, 4, 'A', 'B', 'C']; 
var arr2 = [];
Array.prototype.copyShift = function() {
  var result = [],
    newArr = [];
  result = this[0];
  for(var i = 1; i < this.length; i++) {// 将数组的第二个至最后一项的值赋值给newArr
    newArr[newArr.length] = this[i];
  }
  for(var i = 0; i < newArr.length; i++) { //newArr赋值给原数组
    this[i] = newArr[i];
  }
  this.length = newArr.length;
  return result;
};
console.log(arr1.copyShift());  // 1
console.log(arr1); // [2, 3, 4, 'A', 'B']
console.log(arr2.copyShift()); // undefined
console.log(arr2); // []

运行结果:

JS数组方法shift()、unshift()用法实例分析

方法二:将上述代码修改为如下:(去掉中间数组newArr,直接在原数组上操作)

var arr1 = [1, 2, 3, 4, 'A', 'B', 'C']; 
var arr2 = [];
Array.prototype.copyShift = function() {
  var result = [];
  result = this[0];
/* 
  for(var i = 1; i < this.length; i++) {// 将数组的第二个至最后一项的值赋值给newArr
    newArr[newArr.length] = this[i];
  }
  for(var i = 0; i < newArr.length; i++) { //newArr赋值给原数组
    this[i] = newArr[i];
  }
  this.length = newArr.length;
 */
  // 将数组的后一项赋值给前一项
  for(var i = 0; i < this.length; i++) {
    this[i] = this[i + 1];
  }
  if(this.length > 1) {//去掉数组最后一项
    this.length = this.length - 1;
  }
  return result;
};
console.log(arr1.copyShift());  // 1
console.log(arr1); // [2, 3, 4, 'A', 'B']
console.log(arr2.copyShift()); // undefined
console.log(arr2); // []

运行结果:

JS数组方法shift()、unshift()用法实例分析

unshift()方法

1. 定义:将一个或多个元素添加到数组的开头,并返回新数组的长度。
2. 语法:arr.unshift(element1, ..., elementN)
3. 参数:数组前端添加任意个项
4. 返回值:当一个对象调用该方法时,返回其 length 属性值。

代码如下:

方法一:

var arr1 = [1, 2, 3, 4, 'A', 'B', 'C']; 
var arr2 = [1, 2, 3, 4];
Array.prototype.copyUnshift = function() {
  var newArr = [],
    argLen = arguments.length,
    len = argLen + this.length;
  for(var i = 0; i < len; i++) {
/* 
    if(i < argLen) {
      newArr[i] = arguments[i];
    }
    else {
      newArr[i] = this[i - argLen];
    }
 */
    // 上述代码也可写为:
    newArr[i] = (i < argLen) ? arguments[i] : this[i - argLen];
  }
  for(var i = 0; i < len; i++) {
    this[i] = newArr[i];
  }
  return len;
};
console.log(arr1.copyUnshift('XXX', 'YYY', 'ZZZ'));  // 10
console.log(arr1); // ['XXX', 'YYY', 'ZZZ', 1, 2, 3, 4, 'A', 'B']
console.log(arr2.copyUnshift()); // 4
console.log(arr2); // [1, 2, 3, 4]

运行结果:

JS数组方法shift()、unshift()用法实例分析

//同方法一一样,只不过是for循环以递减的形式
var arr1 = [1, 2, 3, 4, 'A', 'B', 'C']; 
var arr2 = [1, 2, 3, 4];
Array.prototype.copyUnshift = function() {
  var newArr = [],
    argLen = arguments.length,
    len = argLen + this.length;
  //同方法一一样,只不过是for循环以递减的形式
  for(var i = len - 1; i >= 0; i--) {
/*     if(i < argLen) {
      newArr[i] = arguments[i];
    }
    else {
      newArr[i] = this[i - argLen];
    } */
    // 上述代码也可写为:
    newArr[i] = (i < argLen) ? arguments[i] : this[i - argLen];
  }
  for(var i = 0; i < len; i++) {
    this[i] = newArr[i];
  }
  return len;
};

接上递减形式的for循环,进一步可修改为:

方法二: 直接修改原数组,不借助中间数组

var arr1 = [1, 2, 3, 4, 'A', 'B', 'C']; 
var arr2 = [1, 2, 3, 4];
Array.prototype.copyUnshift = function() {
  var argLen = arguments.length,
    len = argLen + this.length;
  for(var i = len - 1; i >= 0; i--) {
/*     if(i > argLen - 1) {
      this[i] = this[i - argLen];
    }
    else {
      this[i] = arguments[i];
    }
 */
    this[i] = (i > argLen - 1) ? this[i - argLen] : arguments[i]; 
  }
  return len;
};
console.log(arr1.copyUnshift('XXX', 'YYY', 'ZZZ'));  // 10
console.log(arr1); // ['XXX', 'YYY', 'ZZZ', 1, 2, 3, 4, 'A', 'B']
console.log(arr2.copyUnshift()); // 4
console.log(arr2); // [1, 2, 3, 4]

运行结果:

JS数组方法shift()、unshift()用法实例分析

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery为iframe的body添加click事件的实现代码
Apr 07 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
js实现弹窗居中的简单实例
Oct 09 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
Mar 22 Javascript
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
微信小程序开发中var that =this的用法详解
Jan 18 #Javascript
JavaScript实现滑动门效果
Jan 18 #Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 #Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 #Javascript
JS数组方法join()用法实例分析
Jan 18 #Javascript
JavaScript进制转换实现方法解析
Jan 18 #Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 #Javascript
You might like
php不用正则采集速度探究总结
2008/03/24 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
range 标准化之获取
2011/08/28 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
cookie的secure属性详解
2015/04/08 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
Django添加feeds功能的示例
2018/08/07 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
python 的topk算法实例
2020/04/02 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
工地食品安全责任书
2015/05/09 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android