JS數(shù)組方法shift()、unshift()用法實(shí)例分析
本文實(shí)例講述了JS數(shù)組方法shift()、unshift()用法。分享給大家供大家參考,具體如下:
shift()方法
1. 定義:從數(shù)組中刪除第一個(gè)元素,并返回該元素的值。此方法更改數(shù)組的長(zhǎng)度。
2. 語(yǔ)法: arr.shift()
3. 參數(shù):/
4. 返回值:從數(shù)組中刪除的元素(當(dāng)數(shù)組為空時(shí)返回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++) {// 將數(shù)組的第二個(gè)至最后一項(xiàng)的值賦值給newArr
newArr[newArr.length] = this[i];
}
for(var i = 0; i < newArr.length; i++) { //newArr賦值給原數(shù)組
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); // []
運(yùn)行結(jié)果:

方法二:將上述代碼修改為如下:(去掉中間數(shù)組newArr,直接在原數(shù)組上操作)
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++) {// 將數(shù)組的第二個(gè)至最后一項(xiàng)的值賦值給newArr
newArr[newArr.length] = this[i];
}
for(var i = 0; i < newArr.length; i++) { //newArr賦值給原數(shù)組
this[i] = newArr[i];
}
this.length = newArr.length;
*/
// 將數(shù)組的后一項(xiàng)賦值給前一項(xiàng)
for(var i = 0; i < this.length; i++) {
this[i] = this[i + 1];
}
if(this.length > 1) {//去掉數(shù)組最后一項(xiàng)
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); // []
運(yùn)行結(jié)果:

unshift()方法
1. 定義:將一個(gè)或多個(gè)元素添加到數(shù)組的開(kāi)頭,并返回新數(shù)組的長(zhǎng)度。
2. 語(yǔ)法:arr.unshift(element1, ..., elementN)
3. 參數(shù):數(shù)組前端添加任意個(gè)項(xiàng)
4. 返回值:當(dāng)一個(gè)對(duì)象調(diào)用該方法時(shí),返回其 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];
}
*/
// 上述代碼也可寫(xiě)為:
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]
運(yùn)行結(jié)果:

//同方法一一樣,只不過(guò)是for循環(huán)以遞減的形式
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;
//同方法一一樣,只不過(guò)是for循環(huán)以遞減的形式
for(var i = len - 1; i >= 0; i--) {
/* if(i < argLen) {
newArr[i] = arguments[i];
}
else {
newArr[i] = this[i - argLen];
} */
// 上述代碼也可寫(xiě)為:
newArr[i] = (i < argLen) ? arguments[i] : this[i - argLen];
}
for(var i = 0; i < len; i++) {
this[i] = newArr[i];
}
return len;
};
接上遞減形式的for循環(huán),進(jìn)一步可修改為:
方法二: 直接修改原數(shù)組,不借助中間數(shù)組
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]
運(yùn)行結(jié)果:

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
Function.prototype.call.apply結(jié)合用法分析示例
昨天在網(wǎng)上看到一個(gè)很有意思的js面試題:var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]);alert(a); 分析步驟如下,感興趣的朋友可以參考下哈2013-07-07
JavaScript如何從listbox里同時(shí)刪除多個(gè)項(xiàng)目
要從列表框同時(shí)刪除多個(gè)項(xiàng)目只能從下向上刪除,這樣就不會(huì)出現(xiàn)索引號(hào)亂變的問(wèn)題了,下面有個(gè)不錯(cuò)的示例,大家可以感受下2013-10-10
js實(shí)現(xiàn)隨機(jī)數(shù)字字母驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了js隨機(jī)驗(yàn)證碼的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JS實(shí)現(xiàn)六邊形3D拖拽翻轉(zhuǎn)效果的方法
這篇文章給大家分享一個(gè)利用javascript實(shí)現(xiàn)3D六邊形拖拽翻轉(zhuǎn)的效果實(shí)例,實(shí)現(xiàn)后的效果很贊,對(duì)大家的學(xué)習(xí)Javascript具有一定的參考借鑒價(jià)值,有需要的朋友們一起去來(lái)看看吧。2016-09-09
微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
BootStrap中的Fontawesome 圖標(biāo)
這篇文章主要介紹了BootStrap中Fontawesome 圖標(biāo)的相關(guān)知識(shí),需要的朋友可以參考下2017-05-05
Bootstrap字體圖標(biāo)無(wú)法正常顯示的解決方法
這篇文章主要為大家詳細(xì)介紹了Bootstrap字體圖標(biāo)無(wú)法正常顯示的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

