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 相关文章推荐
用js实现手把手教你月入万刀(转贴)
Nov 07 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
jquery选择器大全 全面详解jquery选择器
Mar 06 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
ES6 fetch函数与后台交互实现
Nov 14 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 Javascript
Web应用开发TypeScript使用详解
May 25 Javascript
微信小程序开发中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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
学习php中的正则表达式
2014/08/17 PHP
js 操作符实例代码
2009/10/24 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
深入理解js promise chain
2016/05/05 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
使用Python编写Linux系统守护进程实例
2015/02/03 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
django中ImageField的使用详解
2020/12/21 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
关于奉献的演讲稿
2014/05/21 职场文书
个人简历求职信范文
2015/03/20 职场文书
舞出我人生观后感
2015/06/16 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
文明礼貌主题班会
2015/08/14 职场文书