Fork me on GitHub

JavaScript数据结构01 - 数组

array

一、创建数组

1.1 使用Array构造函数

1
2
3
var arr1 = new Array(); // 创建一个空数组
var arr2 = new Array(10); // 创建一个包含20项的数组
var arr3 = new Array('liu', 'wang', 'li'); // 创建一个包含3个字符串的数组

1.2 使用数组字面量表示法

1
2
3
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 字符串而生成的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 值。

1
2
3
4
5
6
7
8
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() 方法使用数组提供的先进后出栈的功能。

1
2
3
4
5
6
7
8
9
10
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。

1
2
3
4
5
6
7
8
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() 方法不创建新的创建,而是直接修改原有的数组。

1
2
3
4
5
6
7
8
9
10
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()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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,即数组不会被查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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后返回正数

1
2
3
4
5
6
7
8
9
10
11
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"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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中删除了元素,则返回的是含有被删除的元素的数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
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会调用这一方法将数组自动转换成字符串。但是在某些情况下,需要显式地调用该方法。

1
2
3
4
5
6
7
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() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。

1
2
3
4
5
6
7
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()

1
2
3
4
5
6
7
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’。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()操作的参数是数组,那么添加的是数组中的元素,而不是数组。

1
2
3
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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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的数组项取出来组成一个新的数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

1
2
3
4
5
6
7
8
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 可选。对象作为该执行回调时使用,传递给函数。
1
2
3
4
5
6
7
8
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 可选。传递给函数的初始值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 可选。传递给函数的初始值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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~~