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 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
Javascript 获取字符串字节数的多种方法
Jun 02 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
Feb 06 Javascript
浅谈js的异步执行
Oct 18 Javascript
node.js 和HTML5开发本地桌面应用程序
Dec 13 Javascript
原生JS中slice()方法和splice()区别
Mar 06 Javascript
vue组件编写之todolist组件实例详解
Jan 22 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
小程序实现录音功能
Sep 22 Javascript
Vue——前端生成二维码的示例
Dec 19 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
我的论坛源代码(五)
2006/10/09 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
jquery操作select大全
2014/04/25 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
浅谈vue的踩坑路
2017/08/31 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
详解appium+python 启动一个app步骤
2017/12/20 Python
Django对models里的objects的使用详解
2019/08/17 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
土木工程师岗位职责
2013/11/24 职场文书
客服专员岗位职责
2014/02/28 职场文书
大学生求职信
2014/06/17 职场文书
工程部文员岗位职责
2015/02/04 职场文书
工程款申请报告
2015/05/15 职场文书
保外就医申请书范文
2015/08/06 职场文书
旅游安全责任协议书
2016/03/22 职场文书