重寫陣列的方法(改變原陣列)
下圖是我自我學習模擬陣列時總結的一些重新陣列的方法:
本文我們暫不討論不改變原陣列的方法,只談改變原陣列用到的 6 種方法。
改變原陣列的方法
push()
按引數順序向陣列尾部新增元素,返回新陣列的長度
var color = [ 'red', 'green']
var color2 = color2. push([ 'blue', 'purple'])
alert( color) // ['red', 'green']
alert( color2) // ['red', 'green','blue','purple']
重寫:
Array. prototype. _push = function() {
for( let i = 0; i < arguments. length; i ++) {
this[ this. length] = arguments[ i]
}
return this. length
}
var arr1 = [ 1, 2, 3]
console. log( arr1. push( 4, 5)) // 返回新陣列的長度 5
console. log( arr1. _push( 6, 7)) // 返回新陣列的長度 7
console. log( arr1) // [1, 2, 3, 4, 5, 6, 7]
pop()
刪除陣列中的最後一個元素,並返回該元素
var color = [ 'red', 'green', 'blue', 'purple']
var color2 = color. pop()
alert( color) // ['red','green','blue']
alert( color2) // ['purple']
Array. prototype. _pop() = function() {
if( this. length) {
let res = this[ this. length - 1]
delete this[ this. length]
this. length --
return res
}
}
let arr2 = [ 1, 2, 3, 4, 5]
console. log( arr2. pop()) // 返回刪除的元素 5
console. log( arr2. _pop()) // 返回刪除的元素 4
console. log( arr2) // [1, 2, 3]
sort()
預設情況下,sort () 會按照升序重新排列陣列元素,即最小的值在前面,最大的值在後面。因此,sort () 會在每一項上呼叫 string () 轉換函式,然後比較字串來決定順序。即使陣列的元素都是數值,也會先把陣列轉換成字串再比較、排序。例如:
let values = [ 0, 1, 5, 10, 15]
values. sort()
console. log( values) //0,1,10,15,5
一開始陣列中的數值的順序是正確的,但是呼叫 sort () 會按照這些數值的字串形式重新排序。所以它可以接收一個比較函式,用於判斷哪個值應該排在前面。
function compare( a, b) {
if( a < b) return - 1
else if( a > b) return 1
else return 0
}
這個比較函式可以適用於大多數資料型別,可以把他當做引數傳給 sort (),例如:
let values = [ 0, 1, 5, 10, 15]
values. sort( compare)
console. log( values) // 0,1,5,10,15
當然,也可以使排序產生降序效果,只需要把返回值交換一下即可:
function compare( a, b) {
if( a < b) return 1
else if( a > b) return - 1
else return 0
}
let values = [ 0, 1, 5, 10, 15]
values. sort( compare)
console. log( values) // 15,10,5,1,0
重寫:
var arr = [ 4, 1, 6, 9, 3, 2, 8, 7]
var arr2 = [ 4, 1, 6, 9, 3, 2, 8, 7]
console. log( arr. sort());
Array. prototype. mySort = function ( arr) {
for ( var i = 0; i < this. length; i ++) {
for ( var j = i + 1; j < this. length; j ++) {
if ( this[ i] > this[ j]) {
var temp = this[ i]
this[ i] = this[ j]
this[ j] = temp;
}
}
}
return this
}
console. log( 'mySort:', arr2. mySort());
reverse()
將陣列倒敘,改變原陣列
Array. prototype. myReverse = function () {
var left = 0,
right = this. length - 1;
while ( left < right) {
var temp = this[ left];
this[ left] = this[ right];
this[ right] = temp;
left ++;
right --;
}
}
var arr2 = [ 1, 3, 5, 7, 9]
console. log( 'before:', arr2)
myReverse( arr2)
console. log( 'after:', arr2)
shift()
刪除陣列第一個元素,並返回該元素
var arr = [ 1, 3, 5, 7]
console. log( arr. unshift( 9))
console. log( arr)
Array. prototype. myUnshift = function () {
var L = this. length;
var newArr = arguments. length
for ( var i = L + newArr - 1; i >= 0; i --) {
if ( i > newArr - 1) {
this[ i] = this[ i - newArr];
} else {
this[ i] = arguments[ i];
}
}
return this. length;
}
var arr2 = [ 1, 3, 5, 7,]
console. log( 'myUnshift:', arr2. myUnshift( 9));
console. log( 'myUnshift:', arr2)
unshift()
var arr = [ 1, 3, 5, 7]
console. log( arr. unshift( 9))
console. log( arr)
Array. prototype. myUnshift = function () {
var L = this. length;
var newArr = arguments. length
for ( var i = L + newArr - 1; i >= 0; i --) {
if ( i > newArr - 1) {
this[ i] = this[ i - newArr];
} else {
this[ i] = arguments[ i];
}
}
return this. length;
}
var arr2 = [ 1, 3, 5, 7,]
console. log( 'myUnshift:', arr2. myUnshift( 9));
console. log( 'myUnshift:', arr2)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021806/viewspace-2914133/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- javascript中常用的陣列操作方法,以及是否會改變原始陣列JavaScript陣列
- 陣列去重的方法陣列
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- JavaScript陣列去重方法JavaScript陣列
- Javascript - 陣列和陣列的方法JavaScript陣列
- 陣列去重,地址不改變陣列
- Javascript如何改變陣列的長度?JavaScript陣列
- JS陣列去重 – JSON陣列去重陣列JSON
- 陣列去重的幾個方法陣列
- 陣列去重的六種方法陣列
- 陣列與方法的呼叫(重點)陣列
- 陣列去重的幾種方法陣列
- js中那些方法不改變原來的陣列物件JS陣列物件
- 陣列去重方法總結陣列
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- golang 陣列去重 移除陣列指定元素Golang陣列
- 陣列去重和陣列扁平化陣列
- 陣列去重陣列
- 陣列的方法陣列
- JS陣列去重的幾種方法JS陣列
- 好像不是最全的陣列去重方法陣列
- 陣列去除重複的幾個方法陣列
- JS陣列去重的10種方法JS陣列
- 陣列方法陣列
- JavaScript陣列去重方法總結JavaScript陣列
- JS陣列去重7種方法JS陣列
- web前端陣列處理之陣列去重Web前端陣列
- php二維陣列改鍵名的方法PHP陣列
- 陣列物件去重陣列物件
- JavaScript陣列去重JavaScript陣列
- JavaScript 陣列去重JavaScript陣列
- js陣列去重JS陣列
- 陣列常用的方法陣列
- 陣列的常用方法陣列
- JS陣列的方法JS陣列
- 三種常用的js陣列去重方法JS陣列
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列