手记
下载APP

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"));             // 4console.log(arr);                           // ["Geroge", "John", "Thomas", "James"]
console.log(arr.push("Peter", "Sara"));     // 6console.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"));              // 4console.log(arr);                               // ["James", "Geroge", "John", "Thomas"]
console.log(arr.unshift("Peter", "Sara"));      // 6console.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'));             // 2console.log(arr.indexOf('Thomas', 2));          // 2console.log(arr.indexOf('Thomas', 3));          // -1console.log(arr.indexOf('Thomas', -4));         // 2console.log(arr.indexOf('Thomas', -3));         // -1console.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'));             // 2console.log(arr.lastIndexOf('Thomas', 2));          // 2console.log(arr.lastIndexOf('Thomas', 3));          // 2console.log(arr.lastIndexOf('Thomas', 1));          // -1console.log(arr.lastIndexOf('Thomas', -4));         // 2console.log(arr.lastIndexOf('Thomas', -3));         // 2console.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);    // falseages = [];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);    // trueages = [];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);                 // 25console.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);                 // 45console.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);                 // 25console.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);                 // 45console.log(numbers);               // [15, 2, 1, 7]

三、结束

本文会同步到我的个人博客,完整代码可以到我的github仓库查看,如果对你有帮助的话欢迎点一个Star~~

原文链接:https://segmentfault.com/a/1190000015765638

原文作者:liuxuan


打开App,阅读手记
0人推荐
随时随地看视频慕课网APP