电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JS數組push、unshift、pop、shift方法的實現與使用方法示例

瀏覽:141日期:2024-05-11 08:56:10

本文實例講述了JS數組push、unshift、pop、shift方法的實現與使用方法。分享給大家供大家參考,具體如下:

尾部添加(push)

push() 方法將一個或多個元素添加到數組的末尾,并返回該數組的新長度。

從解釋中可以看出,push方法只要將要添加的元素依次放到數組的最后即可,不會改變原有數組元素的索引。所以循環參數列表,將新元素依次放到數組的最后即可。

Array.prototype._push = function(...value) { for (var i = 0; i < arguments.length; i++) { this[this.length] = arguments[i] } return this.length}var arr = [1, 2, 3, 4]arr._push(9, 8)console.log(arr) // [ 1, 2, 3, 4, 9, 8 ]

頭部添加(unshift)

unshift() 方法將一個或多個元素添加到數組的開頭,并返回該數組的新長度(該方法修改原有數組)。

向數組的頭部添加元素,數組的長度也會發生變化,但不像尾部添加的操作,數組原有元素索引不改變。做頭部添加的操作,需要將原有元素的索引向右移動。

例如只添加一位,則需要將數組的每個元素的索引依次向右移一位,假設原來數組長度是4,頭部添加一個元素,長度變為5.

所以現在就變成:array.length = 5,而目前array[5 - 1]是最后一個元素,現在由于依次往后移動,所以,array[5]必須是最后一個元素

所以我們可以從數組的最后一位的下一位往前循環,將array[i]賦值為array[i - 1],循環到1停止,將array的第0項賦值為需要添加的值。

過程如下

JS數組push、unshift、pop、shift方法的實現與使用方法示例

具體代碼實現:

Array.prototype._unshift = function(value) { for (let i = this.length; i > 0; i--) { this[i] = this[i - 1] } this[0] = value return this.length}var arr = [1, 2, 3, 4]arr._unshift(8)console.log(arr); // [ 8, 1, 2, 3, 4 ]

但上面的代碼只實現了一個元素的頭部添加,unshift方法支持添加多個元素。例如:

var arr = [1, 2, 3, 4]arr.unshift(8, 7)console.log(arr); // [ 8, 7, 1, 2, 3, 4 ]

針對這樣的情況,需要知道傳入了幾個參數,可以從arguments對象入手,思路還是上面的思路:先以最后生成的數組長度為基準從后往前循環,依次移動元素,然后將新元素依次放到數組的頭部

新數組的長度等于原數組的長度 + 參數的個數,從后往前循環,將原數組的最后一位,移動到新數組的最后一位,

因為需要在頭部插入數量為入參個數的元素,所以循環的起點為原數組的長度 + 參數的個數,循環的終點為入參的個數。

但由于索引總是比長度少一位,所以起點和終點都需要減1。

現在可以先把循環移動的邏輯寫出來

Array.prototype._unshift = function(...value) { for (var i = (this.length + arguments.length - 1); i > arguments.length - 1; i--) { this[i] = this[i - arguments.length] }}

再思考一下,由于上一步已經移動完了,數組頭部的位置已經空出來了,第二步是有幾個參數就要插入幾個元素。所以現在只需要循環插入就好:

for(var k = 0; k < arguments.length; k++) { this[k] = arguments[k]}

完整的代碼如下:

Array.prototype._unshift = function(...value) { for (var i = (this.length + arguments.length - 1); i > arguments.length - 1; i--) { this[i] = this[i - arguments.length] } for(var k = 0; k < arguments.length; k++) { this[k] = arguments[k] } return this.length}var arr = [1, 2, 3, 4]arr._unshift(9, 8)console.log(arr); // [ 9, 8, 1, 2, 3, 4 ]

尾部刪除 (pop)

`pop() 方法將刪除 arrayObject 的最后一個元素,把數組長度減 1,并且返回它刪除的元素的值。如果數組已經為空,則 pop() 不改變數組,并返回 undefined 值。`

這個很好實現,按照定義一步一步做就可以。首先,記錄下最后一個元素,便于返回,之后從數組中刪除最后一個元素,將其指向null釋放掉,然后將數組的長度減1,最后判斷一下是否為空數組。

Array.prototype._pop = function () { if (!this.length) { return undefined } var end = this[this.length - 1] this[this.length - 1] = null this.length = this.length - 1 return end}var arr = [1, 2, 3, 4]arr._pop()console.log(arr); // [ 1, 2, 3 ]

頭部刪除(shift)

shift() 方法用于把數組的第一個元素從其中刪除,并返回第一個元素的值。

頭部刪除,會改變原有數組元素的索引,也就是將未被刪除的元素索引都往左移一位,首先要將被刪除的元素記錄下來便于返回,之后將數組第一個元素指向null,

最后循環數組,移動索引。

Array.prototype._shift = function () { if (!this.length) { return undefined } var start = this[0] this[0] = null for(var i = 0; i < this.length - 1; i++) { this[i] = this[i + 1] } this.length = this.length - 1 return start}var arr = [1, 2, 3, 4]arr._shift()console.log(arr); // [ 2, 3, 4 ]

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數組操作技巧總結》、《JavaScript遍歷算法與技巧總結》、《javascript面向對象入門教程》、《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript錯誤與調試技巧總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 识禅_对禅的了解,从这里开始| 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 膜结构停车棚-自行车棚-膜结构汽车棚加工安装厂家幸福膜结构 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 |