资讯专栏INFORMATION COLUMN

JavaScript数据结构01 - 数组

godlong_X / 602人阅读

摘要:元素是通过指定的分隔符进行分隔的。如果数组已经为空,则不改变数组,并返回值。可添加多个元素返回值把指定的值添加到数组后的新长度。该参数是数组片断结束处的数组下标。返回值对数组的引用。语法返回值的字符串表示。当前元素所属的数组对象。

一、创建数组 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~~

欢迎关注我的公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108119.html

相关文章

  • 听飞狐聊JavaScript设计模式系列01

    摘要:前言大家好,小弟飞狐,爱学习,爱装逼,乐于分享,初来乍到,请多多关照。特别注意一下,函数在中是对象,不是一种数据类型,这可是世界的一等公民。和,和的关系又很暧昧,后面细说,要不然会晕菜。基本数据类型,,,,,这五种基本数据类型是按值访问的。 前言 大家好,小弟飞狐,爱学习,爱装逼,乐于分享,初来乍到,请多多关照(~ o ~)~zZ。出道几年,对JavaScript情有独钟,聊技术之前,...

    CHENGKANG 评论0 收藏0
  • JavaScript 实现链表操作 - 01 Push & Build List

    摘要:写两个帮助函数来创建链表。用于把一个节点插入到链表的头部。这个方法应该始终返回一个新的链表。接收一个数组为参数,创建对应的链表。参考资料的代码实现的测试 TL;DR 写两个帮助函数来创建链表。系列目录见 前言和目录 。 需求 写两个方法 push 和 buildList 来初始化链表。尝试在 buildList 中使用 push 。下面的例子中我用 a -> b -> c 来表示链表,...

    Scorpion 评论0 收藏0
  • 读书笔记(01) - JSON - JavaScript高级程序设计

    摘要:用于把对象序列化字符串,在序列化对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。对第步返回的每个值进行相应的序列化。参考文档高级程序设计作者以乐之名本文原创,有不当的地方欢迎指出。 showImg(https://segmentfault.com/img/bVburW1?w=658&h=494); JSON与JavaScript对象 JSON是一种表示结构化数据的存储格式,语...

    mengbo 评论0 收藏0
  • JavaScript数据结构与算法-String-(leetcode原题)

    摘要:重复出现的子串要计算它们出现的次数。示例输入输出解释有个子串,,,,它们具有相同数量的连续和。注意在到之间。以此类推,剃掉原字符串的第一个字符后再调用一次方法,直到原字符串只剩下个字符,返回数组的长度,即为题解。 博客原文地址:https://finget.github.io/2019... 反转整数 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 ...

    KoreyLee 评论0 收藏0
  • array数组类型

    摘要:中并没有明确的数组数据类型。创建一维数组具有以下几种方式二维数组数组是可以嵌套,这就意味着一个数组可以作为一个数组被包含在另外一个数组里面。利用这个特点,创建二维数组,即数组的数组。删除数组的最后一个元素并返回删除的元素。 Array 概述 一维数组 数组是一个有序的数据集合,可以通过数组名称和索引进行访问。JavaScript中并没有明确的数组数据类型。创建一维数组具有以下几种方式:...

    lemanli 评论0 收藏0
  • 煦涵说JSON

    摘要:对象表示法,是一种数据交换格式,能够在服务器端交换数据,年由提出,目的是取代繁琐笨重的格式。煦涵煦涵煦涵煦涵煦涵参考文档感谢您的阅读作者煦涵年月日下面是实验室的微信公众号二维码,欢迎长按扫描关注 JSON(Javascript Object Notaion, javascript 对象表示法), 是一种数据交换格式,能够在服务器端交换数据, 2001年由Douglas Crockfor...

    lowett 评论0 收藏0

发表评论

0条评论

godlong_X

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<