JavaScript資料結構01 - 陣列

leocoder發表於2018-07-25

一、建立陣列

1.1 使用Array建構函式

var arr1 = new Array(); // 建立一個空陣列
var arr2 = new Array(10);   // 建立一個包含20項的陣列
var arr3 = new Array('liu', 'wang', 'li');  // 建立一個包含3個字串的陣列
複製程式碼

1.2 使用陣列字面量表示法

var arr1 = [];  // 建立一個空陣列
var arr2 = [10];    // 建立一個包含1項的陣列
var arr3 = ['liu', 'wang', 'li'];   // 建立一個包含3個字串的陣列
複製程式碼

二、常用陣列方法

方法名 描述
join 把陣列的所有元素放入一個字串,元素通過指定的分隔符進行分隔
pop 刪除並返回陣列的最後一個元素
push 向陣列的末尾新增一個或更多元素,並返回新的長度
shift 刪除並返回陣列的第一個元素
unshift 向陣列的開頭新增一個或更多元素,並返回新的長度
slice 從某個已有的陣列返回指定的元素
indexOf 返回第一個與給定引數相等的陣列元素的索引,沒有找到則返回-1
lastIndexOf 返回在陣列中搜尋到的與給定引數相等的元素的索引裡的最大的值,沒有找到則返回-1
sort 對陣列的元素進行排序
splice 刪除元素,並向陣列新增新元素
toString 把陣列轉換為字串,並返回結果
toLocaleString 把陣列轉換為本地字串,並返回結果
valueOf 返回陣列物件的原始值
forEach 對陣列中的每一項執行指定函式,這個方法沒有返回值
concat 連線2個或更多陣列,並返回結果
every 對陣列中的每一項執行指定函式,如果該函式對每一項都返回true,則返回true
some 對陣列中的每一項執行指定函式,如果任一項返回true,則返回true
filter 對陣列中的每一項執行指定函式,返回該函式會返回true的項組成的陣列
reverse 顛倒陣列中元素的順序
map 對陣列中的每一項執行指定函式,返回每次函式呼叫的結果組成的陣列
reduce 接收一個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為一個值
reduceRight 接收一個函式作為累加器,陣列中的每個值(從右到左)開始縮減,最終計算為一個值

PS:原始值是指固定而簡單的值,存放在棧中的簡單資料段,它們的值直接儲存在變數訪問的位置。

JavaScript中有五種原始型別,也叫基本型別:
Number、String、Boolean、Undefined、Null

三、演示例項

3.1 join

定義和用法

join()方法用於把陣列中的所有元素放入一個字串。
元素是通過指定的分隔符進行分隔的。

語法

arrayObject.join(separator)

引數 描述
seperator 可選。指定要使用的分隔符,如果省略該引數,則使用逗號作為分隔符

返回值

返回一個字串。該字串是通過把 arrayObject 的每個元素轉換為字串,然後把這些字串連線起來,在兩個元素之間插入 separator 字串而生成的。

var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

var str1 = arr.join();
var str2 = arr.join('');
var str3 = arr.join(' ');
var str4 = arr.join('-');

console.log(str1);  // "Geroge,John,Thomas"
console.log(str2);  // "GerogeJohnThomas"
console.log(str3);  // "Geroge John Thomas"
console.log(str4);  // "Geroge-John-Thomas"
複製程式碼

3.2 pop

定義和用法

pop()方法用於刪除並返回陣列的最後一個元素。

語法

arrayObject.pop()

返回值

arrayObject 的最後一個元素。

說明

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

var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

console.log(arr);           // ["Geroge", "John", "Thomas"]
console.log(arr.pop());     // "Thomas"
console.log(arr);           // ["Geroge", "Thomas"]
複製程式碼

3.3 push

定義和用法

push()方法可向陣列的末尾新增一個或多個元素,並返回新的長度。

語法

arrayObject.push(newElement1, newElement2, ..., newElementX)

引數 描述
newElement1 必需。要新增到陣列末尾的第一個元素
newElement2 可選。要新增到陣列末尾的第二個元素
newElementX 可選。可新增多個元素

返回值

把指定的值新增到陣列後的新長度。

說明

push() 方法可把它的引數順序新增到 arrayObject 的尾部。它直接修改 arrayObject,而不是建立一個新的陣列。push() 方法和 pop() 方法使用陣列提供的先進後出棧的功能。

var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

console.log(arr);                           // ["Geroge", "John", "Thomas"]
console.log(arr.push("James"));             // 4
console.log(arr);                           // ["Geroge", "John", "Thomas", "James"]
console.log(arr.push("Peter", "Sara"));     // 6
console.log(arr);                           // ["Geroge", "John", "Thomas", "James", "Peter", "Sara"]
複製程式碼

3.4 shift

定義和用法

shift()方法用於把陣列的第一個元素從其中刪除,並返回第一個元素的值。

語法

arrayObject.shift()

返回值

陣列原來的第一個元素的值。

說明

如果陣列是空的,那麼 shift() 方法將不進行任何操作,返回 undefined 值。請注意,該方法不建立新陣列,而是直接修改原有的 arrayObject。

var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

console.log(arr);           // ["Geroge", "John", "Thomas"]
console.log(arr.shift());   // "Geroge"
console.log(arr);           // ["John", "Thomas"]
複製程式碼

3.5 unshift

定義和用法

unshift()方法可向陣列的開頭新增一個或多個元素,並返回新的長度。

語法

arrayObject.unshift(newElement1, newElement2, ..., newElementX)

引數 描述
newElement1 必需。要新增到陣列開頭的第一個元素
newElement2 可選。要新增到陣列開頭的第二個元素
newElementX 可選。可新增多個元素

返回值

arrayObject 的新長度。

說明

unshift() 方法將把它的引數插入 arrayObject 的頭部,並將已經存在的元素順次地移到較高的下標處,以便留出空間。該方法的第一個引數將成為陣列的新元素 0,如果還有第二個引數,它將成為新的元素 1,以此類推。

請注意,unshift() 方法不建立新的建立,而是直接修改原有的陣列。

var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

console.log(arr);                               // ["Geroge", "John", "Thomas"]
console.log(arr.unshift("James"));              // 4
console.log(arr);                               // ["James", "Geroge", "John", "Thomas"]
console.log(arr.unshift("Peter", "Sara"));      // 6
console.log(arr);                               // ["Peter", "Sara", "James", "Geroge", "John", "Thomas"]
複製程式碼

3.6 slice

定義和用法

slice()方法可從已有的陣列中返回選定的元素。slice()方法不改變原陣列。

語法

arrayObject.slice(start, end)

引數 描述
start 必需。規定從何處開始選取。
如果是負數,那麼它規定從陣列尾部開始算起的位置。
也就是說,-1指最後一個元素,-2指倒數第二個元素,以此類推。
end 可選。規定從何處結束選取。
該引數是陣列片斷結束處的陣列下標。
如果沒有指定該引數,那麼切分的陣列包含從start到陣列結束的所有元素。
如果這個引數是負數,那麼它規定的是從陣列尾部開始算起的元素。

返回值

返回一個新的陣列,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。

說明

請注意,該方法並不會修改陣列,而是返回一個子陣列。如果想刪除陣列中的一段元素,應該使用方法 Array.splice()。

var arr = new Array(6);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = "James";
arr[4] = "Adrew";
arr[5] = "Martin";

console.log(arr);                   // ["Geroge", "John", "Thomas", "James", "Adrew", "Martin"]
console.log(arr.slice(0));          // ["Geroge", "John", "Thomas", "James", "Adrew", "Martin"]
console.log(arr.slice(1));          // ["John", "Thomas", "James", "Adrew", "Martin"]
console.log(arr.slice(1, 3));       // ["John", "Thomas"]
console.log(arr.slice(1, -2));      // ["John", "Thomas", "James"]
console.log(arr.slice(-1, -2));     // []
console.log(arr.slice(-2, -1));     // ["Adrew"]
console.log(arr);                   // ["Geroge", "John", "Thomas", "James", "Adrew", "Martin"]
複製程式碼

3.7 indexOf

定義和用法

indexOf()方法可返回某個指定的值在陣列中首次出現的位置。從左往右找,找不到返回-1。

語法

arrayObject.indexOf(searchValue, fromIndex)

引數 描述
searchValue 必需。規定需檢索的值。
fromIndex 可選的整數引數,開始查詢的位置。
如果該索引值大於或等於陣列長度,意味著不會在陣列裡查詢,返回-1。
如果引數中提供的索引值是一個負值,則將其作為陣列末尾的一個抵消,
即-1表示從最後一個元素開始查詢,-2表示從倒數第二個元素開始查詢 ,以此類推。
注意:如果引數中提供的索引值是一個負值,並不改變其查詢順序,
查詢順序仍然是從前向後查詢陣列。如果抵消後的索引值仍小於0,
則整個陣列都將會被查詢。其預設值為0
var arr = new Array(6);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = "James";
arr[4] = "Adrew";
arr[5] = "Martin";

console.log(arr.indexOf('Thomas'));             // 2
console.log(arr.indexOf('Thomas', 2));          // 2
console.log(arr.indexOf('Thomas', 3));          // -1
console.log(arr.indexOf('Thomas', -4));         // 2
console.log(arr.indexOf('Thomas', -3));         // -1
console.log(arr.indexOf('Peter'));              // -1
複製程式碼

3.8 lastIndexOf

定義和用法

lastIndexOf()方法可返回某個指定的值在陣列中首次出現的位置。從右往左找,找不到返回-1。

語法

arrayObject.indexOf(searchValue, fromIndex)

引數 描述
searchValue 必需。規定需檢索的值。
fromIndex 可選的整數引數,從此位置開始逆向查詢。
預設為陣列的長度減 1,即整個陣列都被查詢。
如果該值大於或等於陣列的長度,則整個陣列會被查詢。
如果為負值,將其視為從陣列末尾向前的偏移。
即使該值為負,陣列仍然會被從後向前查詢。
如果該值為負時,其絕對值大於陣列長度,則方法返回 -1,即陣列不會被查詢
var arr = new Array(6);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = "James";
arr[4] = "Adrew";
arr[5] = "Martin";

console.log(arr.lastIndexOf('Thomas'));             // 2
console.log(arr.lastIndexOf('Thomas', 2));          // 2
console.log(arr.lastIndexOf('Thomas', 3));          // 2
console.log(arr.lastIndexOf('Thomas', 1));          // -1
console.log(arr.lastIndexOf('Thomas', -4));         // 2
console.log(arr.lastIndexOf('Thomas', -3));         // 2
console.log(arr.lastIndexOf('Peter'));              // -1
複製程式碼

3.9 sort

定義和用法

sort()方法用於對陣列的元素進行排序。

語法

arrayObject.sort(sortby)

引數 描述
sortby 可選。規定排序順序。必須是函式。

返回值

對陣列的引用。請注意,陣列在原陣列上進行排序,不生成副本。

說明

如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說的更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字串(如有必要),以方便比較。

如果想按照其他標準進行排序,就需要提供比較函式,該函式要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函式應該具有兩個引數a和b,其返回值如下:

  • 若a小於b,在排序後的陣列中a應該出現在b之前,則返回一個小於0的值。
  • 若a等於b,則返回0。
  • 若a大於b,則返回一個大於0的值。

即順序 return a - b; 倒序 return b - a;

a在b前返回負數,a在b後返回正數

var arr = new Array(6);
arr[0] = "10";
arr[1] = "5";
arr[2] = "40";
arr[3] = "25";
arr[4] = "1000";
arr[5] = "1";

console.log(arr);           // ["10", "5", "40", "25", "1000", "1"]
console.log(arr.sort());    // ["1", "10", "1000", "25", "40", "5"]
console.log(arr);           // ["1", "10", "1000", "25", "40", "5"]
複製程式碼
var arr = new Array(6);
arr[0] = "10";
arr[1] = "5";
arr[2] = "40";
arr[3] = "25";
arr[4] = "1000";
arr[5] = "1";

function orderNumber (a, b) {
    return a - b;
}

function descOrderNumber (a, b) {
    return b - a;
}

console.log(arr);                           // ["10", "5", "40", "25", "1000", "1"]
console.log(arr.sort(orderNumber));         // ["1", "5", "10", "25", "40", "1000"]
console.log(arr.sort(descOrderNumber));     // ["1000", "40", "25", "10", "5", "1"]
console.log(arr);                           // ["1000", "40", "25", "10", "5", "1"]
複製程式碼

3.10 splice

定義和用法

splice()方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。該方法會改變原始陣列。

語法

arrayObject.splice(index, howmany, item1, ......, itemX)

引數 描述
index 必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。
howmany 必需。要刪除的專案數量。如果設定為0,則不會刪除專案。
item1,......,itemX 可選。向陣列新增的新專案。

返回值

型別 描述
Array 包含被刪除專案的新陣列,如果有的話。

說明

splice()方法可刪除從index處開始的0個或多個元素,並且用引數列表中宣告的一個或多個值來替換那些被刪除的元素。如果從arrayObject中刪除了元素,則返回的是含有被刪除的元素的陣列。

var arr = new Array(6);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = "James";
arr[4] = "Adrew";
arr[5] = "Martin";

console.log(arr);                                   // ["Geroge", "John", "Thomas", "James", "Adrew", "Martin"]  
console.log(arr.splice(1, 1, 'Peter', 'Sara'));     // ["John"]
console.log(arr);                                   // ["Geroge", "Peter", "Sara", "Thomas", "James", "Adrew", "Martin"]
console.log(arr.splice(1, 0, 'Ella'));              // []
console.log(arr);                                   // ["Geroge", "Ella", "Peter", "Sara", "Thomas", "James", "Adrew", "Martin"]
複製程式碼

3.11 toString

定義和用法

toString()方法可把陣列轉換為字串,並返回結果。

語法

arrayObject.toString()

返回值

arrayObject的字串表示。返回值與沒有引數的join()方法返回的字串相同。

說明

當陣列用於字串環境時,JavaScript會呼叫這一方法將陣列自動轉換成字串。但是在某些情況下,需要顯式地呼叫該方法。

var arr = new Array(4);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = 20;

console.log(arr.toString());    // "Geroge,John,Thomas,20"
複製程式碼

3.12 toLocaleString

定義和用法

toLocaleString()方法可把陣列轉換為本地字串,並返回結果。

語法

arrayObject.toLocaleString()

返回值

arrayObject的本地字串表示。

說明

首先呼叫每個陣列元素的 toLocaleString() 方法,然後使用地區特定的分隔符把生成的字串連線起來,形成一個字串。

var arr = new Array(4);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = 20;

console.log(arr.toLocaleString());    // "Geroge,John,Thomas,20"
複製程式碼

3.13 valueOf

定義和用法

valueOf()方法返回Array物件的原始值。該原始值由Array物件派生的所有物件繼承。valueOf()方法通常由JavaScript在後臺自動呼叫,並不顯式地出現在程式碼中。

語法

arrayObject.valueOf()

var arr = new Array(4);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = 20;

console.log(arr.valueOf());    // ["Geroge", "John", "Thomas", 20]
複製程式碼

3.14 forEach

定義和用法

forEach()方法用於呼叫陣列的每個元素,並將元素傳遞給回撥函式。forEach()對於空陣列是不會執行回撥函式的。

語法

arrayObject.forEach(function (value, index, arr) {}, thisValue)

引數 描述
function(currentValue, index, arr) 必需。陣列中每個元素需要呼叫的函式。
currentValue: 必需。當前元素。
index: 可選。當前元素的索引值。
arr: 可選。當前元素所屬的陣列物件。
thisValue 可選。傳遞給函式的值一般用'this'值。
如果這個引數為空,嚴格模式下把'undefined'會傳遞給'this'值,普通模式下傳入'window'。
var arr = new Array(3);
arr[0] = "Geroge";
arr[1] = "John";
arr[2] = "Thomas";

arr.forEach(function (value, index, arr) {
    console.log(value);     // "Geroge" "John" "Thomas"
    console.log(index);     // 0        1      2
    console.log(arr);       // ["Geroge", "John", "Thomas"]
    console.log(this);      // window
});

arr.forEach(function (value, index, arr) {
    console.log(value);     // "Geroge" "John" "Thomas"
    console.log(index);     // 0        1      2
    console.log(arr);       // ["Geroge", "John", "Thomas"]
    console.log(this);      // ["Geroge", "John", "Thomas"]
}, arr);

複製程式碼

3.15 concat

定義和用法

concat()方法用於連線兩個或多個陣列。該方法不會改變現有的陣列,而僅僅會返回被連線陣列的一個副本。

語法

arrayObject.concat(arrayX,arrayX,......,arrayX)

引數 描述
arrayX 必需。該引數可以是具體的值,也可以是陣列物件。可以是任意多個。

返回值

返回一個新的陣列。該陣列是通過把所有arrayX引數新增到arrayObject中生成的。如果要進行concat()操作的引數是陣列,那麼新增的是陣列中的元素,而不是陣列。

var a = [1, 2, 3];

console.log(a.concat(4, 5, [6, 7], 8, 9));  // [1, 2, 3, 4, 5, 6, 7, 8, 9]
複製程式碼

3.16 every

定義和用法

every()方法用於檢測陣列所有元素是否都符合指定條件(通過函式提供)。 every()方法使用指定函式檢測陣列中的所有元素:

  • 如果陣列中檢測到有一個元素不滿足,則整個表示式返回false,且剩餘的元素不會再進行檢測。
  • 如果所有元素都滿足條件,則返回true。

注意:every()不會對空陣列進行檢測。 注意:every()不會改變原始陣列。

語法

arrayObject.every(function (currentValue, index, arr) {}, thisValue)

引數 描述
function (currentValue, index, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
currentValue: 必需。當前元素。
index: 可選。當前元素的索引值。
arr: 可選。當前元素所屬的陣列物件。
thisValue 可選。物件作為該執行回撥時使用,傳遞給函式。

說明

有一個返回false,則整個every()返回值為false,並且不會執行後續其他項的回撥函式。 空陣列的every()直接返回true。

var ages = [10, 20, 24, 32, 40];

var result = ages.every(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // false

ages = [];
result = ages.every(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // true
複製程式碼

3.17 some

定義和用法

some()方法用於檢測陣列所有元素是否滿足指定條件(通過函式提供)。 every()方法會依次執行陣列的每個元素:

  • 如果有一個元素滿足條件,則表示式返回true,剩餘的元素不會再執行檢測。
  • 如果沒有滿足條件的元素,則返回false。

注意:some()不會對空陣列進行檢測。 注意:some()不會改變原始陣列。

語法

arrayObject.some(function (currentValue, index, arr) {}, thisValue)

引數 描述
function (currentValue, index, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
currentValue: 必需。當前元素。
index: 可選。當前元素的索引值。
arr: 可選。當前元素所屬的陣列物件。
thisValue 可選。物件作為該執行回撥時使用,傳遞給函式。

說明

有一個返回true,則整個some()返回值為true,並且不會執行後續其他項的回撥函式。 空陣列的some()直接返回false。

var ages = [10, 20, 24, 32, 40];

var result = ages.some(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // true

ages = [];
result = ages.some(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // false
複製程式碼

3.18 filter

定義和用法

filter()方法建立一個新的陣列,新陣列中的元素是通過檢查指定陣列中符合條件的所有元素。

注意:filter()不會對空陣列進行檢測。 注意:filter()不會改變原始陣列。

語法

arrayObject.filter(function (currentValue, index, arr) {}, thisValue)

引數 描述
function (currentValue, index, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
currentValue: 必需。當前元素。
index: 可選。當前元素的索引值。
arr: 可選。當前元素所屬的陣列物件。
thisValue 可選。物件作為該執行回撥時使用,傳遞給函式。

說明

將所有返回true的陣列項取出來組成一個新的陣列。

var ages = [10, 20, 24, 32, 40];

var result = ages.filter(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // [32, 40]
console.log(ages);      // [10, 20, 24, 32, 40]

ages = [];
result = ages.filter(function (value, index, arr) {
    return value > 25;
});

console.log(result);    // []
複製程式碼

3.19 reverse

定義和用法

reverse()方法用於顛倒陣列中元素的順序。會改變原陣列。

語法

arrayObject.reverse()

var arr = new Array(3);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";

console.log(arr);               // ["Geroge", "John", "Thomas"]
console.log(arr.reverse());     // ["Thomas", "John", "Geroge"]
console.log(arr);               // ["Thomas", "John", "Geroge"]
複製程式碼

3.20 map

定義和用法

map()方法返回一個新陣列,陣列中的元素為原始陣列元素呼叫函式處理後的值。map()方法按照原始陣列元素順序依次處理元素。

注意:map()不會對空陣列進行檢測。 注意:map()不會改變原始陣列。

語法

arrayObject.map(function (currentValue, index, arr) {}, thisValue)

引數 描述
function (currentValue, index, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
currentValue: 必需。當前元素。
index: 可選。當前元素的索引值。
arr: 可選。當前元素所屬的陣列物件。
thisValue 可選。物件作為該執行回撥時使用,傳遞給函式。
var numbers = [65, 20, 11, 5];

var arr = numbers.map(function (value, index, arr) {
    return value * 2;
})

console.log(numbers);   // [65, 20, 11, 5]
console.log(arr);       // [130, 40, 22, 10]
複製程式碼

3.21 reduce

定義和用法

reduce()方法接收一個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為一個值。

注意:reduce()對於空陣列是不會執行回撥函式的。

語法

arrayObject.reduce(function (total, currentValue, currentIndex, arr) {}, initialValue)

引數 描述
function (total, currentValue, currentIndex, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
total: 必需。初始值,或者計算結束後的返回值。
currentValue: 必需。當前元素。
currentIndex: 可選。當前元素的索引。
arr: 可選。當前元素所屬的陣列物件。
initialValue 可選。傳遞給函式的初始值。
var numbers = [15, 2, 1, 7];

var total = numbers.reduce(function (total, currentValue) {
    console.log(total);             // 15 17 18 25
    console.log(currentValue);      // 2  1  7
    return total + currentValue;
});

console.log(total);                 // 25
console.log(numbers);               // [15, 2, 1, 7]

total = numbers.reduce(function (total, currentValue) {
    console.log(total);             // 20 35 37 38 45
    console.log(currentValue);      // 15 2  1  7
    return total + currentValue;
}, 20);

console.log(total);                 // 45
console.log(numbers);               // [15, 2, 1, 7]
複製程式碼

3.22 reduceRight

定義和用法

reduceRight()方法的功能和reduce()功能是一樣的,不同的是reduceRight()從陣列的末尾向前將陣列中的陣列項做累加。

注意:reduceRight()對於空陣列是不會執行回撥函式的。

語法

arrayObject.reduceRight(function (total, currentValue, currentIndex, arr) {}, initialValue)

引數 描述
function (total, currentValue, currentIndex, arr) 必需。函式,陣列中的每個元素都會執行這個函式。
total: 必需。初始值,或者計算結束後的返回值。
currentValue: 必需。當前元素。
currentIndex: 可選。當前元素的索引。
arr: 可選。當前元素所屬的陣列物件。
initialValue 可選。傳遞給函式的初始值。
var numbers = [15, 2, 1, 7];

var total = numbers.reduceRight(function (total, currentValue) {
    console.log(total);             // 7 8 10 25
    console.log(currentValue);      // 1 2 15
    return total + currentValue;
});

console.log(total);                 // 25
console.log(numbers);               // [15, 2, 1, 7]

total = numbers.reduceRight(function (total, currentValue) {
    console.log(total);             // 20 27 28 30 45
    console.log(currentValue);      // 7  1  2  15
    return total + currentValue;
}, 20);

console.log(total);                 // 45
console.log(numbers);               // [15, 2, 1, 7]
複製程式碼

三、結束

本文會同步到我的個人部落格,完整程式碼可以到我的github倉庫檢視,如果對你有幫助的話歡迎點一個Star~~

歡迎關注我的公眾號

微信公眾號

相關文章