JavaScript数据结构01 - 数组

一、创建数组

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~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

阿里巴巴待遇这么好,为什么还有这么多人离职?

不是每个阿里巴巴的职位待遇都是那么好,而且作为阿里巴巴几万人的大公司即使很低的比例离职也有相当的数量,这也属于正常的现象,正常来讲一个人离职主要有两种理由:

21930
来自专栏飞总聊IT

沟通学TCP握手,等于谋财害命

TCP之所以有这个三次握手协议有很多历史原因。但是最主要的我认为是网络基础架构不稳定。因为不稳定,所以我们需要多次向对方表示或者等待对方反复确认“我爱你”...

15820
来自专栏程序员互动联盟

为什么程序员越来越排斥面试时做题?

从业十几年经历的不是很多, 算起来也就是三四家,在编程行业跳槽比较频繁的行业,这算是一股清流了,呆的习惯了也就懒得动了,主要还是觉得在一个公司呆的时间长点,才真...

29220
来自专栏程序员互动联盟

工程师、程序员、码农有什么区别?

正常来讲工程师范围更加广泛,包括程序员,现在有硬件工程师,实施工程师,安装工程师等等都属于工程师的范畴,一般称呼程序员高大上的称呼软件工程师。

81210
来自专栏ROBOTEDU

【本体】电机偏差值

10940
来自专栏C语言及其他语言

会泡妞的程序员都是怎么撩妹子的?

27240
来自专栏Coding迪斯尼

快速在组合中查找重复和遗失的元素

12240
来自专栏程序员互动联盟

为什么程序员不去《非你莫属》求职?

就目前程序员的现状,稍微水平还不错的程序员只需要在各个招聘网站上投一下,就有很多面试的机会,没必要去非你莫属上面娱乐化找工作,之前也听过程序员上过的,估计是别的...

73030
来自专栏程序员互动联盟

程序员是否应该拿年薪百万的工资?

就目前国内程序员的薪资状态能达到百万级别的少的可怜,做技术开发做过几年之后很快就能达到天花板,就现在国内程序员水平年薪达到这一半就已经算是很不错的了,大部分的程...

12310
来自专栏程序员互动联盟

程序员如何迈过年薪30万的坎?

作为一个写了十几年代码的老程序员,程序员要想拿到年薪30万,起码需要具备以下几个条件:

18820

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励