JavaScript 数组是一种用于存储多个值的数据结构,它提供了许多原生方法用于对数组进行操作。
分类:
-
修改数组的内容:
push()、pop()、unshift()、shift()、splice()、fill() -
遍历数组:
forEach()、map()、filter()、reduce() -
查找数组元素:
indexOf()、lastIndexOf()、includes() -
数组排序和过滤:
sort()、reverse()、filter()、find()、findIndex()、join()、toString()、toLocaleString() -
合并和分割数组:
concat()、slice()、splice()
下面分别介绍每个分类中的常用原生方法,包括方法描述、语法和示例。
1. 修改数组的内容
push()
方法描述:将一个或多个元素添加到数组的末尾,并返回修改后的数组长度。
语法:array.push(element1, ..., elementN)
示例:
const fruits = ['apple', 'banana'];
const newLength = fruits.push('orange', 'pear');
console.log(fruits); // ['apple', 'banana', 'orange', 'pear']
console.log(newLength); // 4
pop()
方法描述:从数组的末尾删除一个元素,并返回该元素的值。
语法:array.pop()
示例:
const fruits = ['apple', 'banana', 'orange'];
const lastFruit = fruits.pop();
console.log(fruits); // ['apple', 'banana']
console.log(lastFruit); // 'orange'
unshift()
方法描述:将一个或多个元素添加到数组的开头,并返回修改后的数组长度。
语法:array.unshift(element1, ..., elementN)
示例:
const fruits = ['apple', 'banana'];
const newLength = fruits.unshift('orange', 'pear');
console.log(fruits); // ['orange', 'pear', 'apple', 'banana']
console.log(newLength); // 4
shift()
方法描述:从数组的开头删除一个元素,并返回该元素的值。
语法:array.shift()
示例:
const fruits = ['orange', 'apple', 'banana'];
const firstFruit = fruits.shift();
console.log(fruits); // ['apple', 'banana']
console.log(firstFruit); // 'orange'
splice()
方法描述:从数组中删除元素,或向数组中添加元素,或同时删除和添加元素,并返回被删除的元素。
语法:array.splice(start, deleteCount, item1, item2, ...)
示例:
const fruits = ['apple', 'banana', 'orange', 'pear'];
const deletedFruits = fruits.splice(1, 2, 'pineapple', 'mango');
console.log(fruits); // ['apple', 'pineapple', 'mango', 'pear']
console.log(deletedFruits); // ['banana', 'orange']
2. 遍历数组
forEach()
方法描述:对数组的每个元素执行一次指定的函数。
语法:array.forEach(callback(currentValue, index, array))
示例:
const numbers = [1, 2, 3];
numbers.forEach(function(num) {
console.log(num * 2);
});
// Output:
// 2
// 4
// 6
map()
方法描述:对数组的每个元素执行一次指定的函数,并返回一个新的数组,其中包含每个函数调用的结果。
语法:array.map(callback(currentValue, index, array))
示例:
const numbers = [1, 2, 3];
const doubledNumbers = numbers.map(function(num) {
return num * 2;
});
console.log(doubledNumbers); // [2, 4, 6]
filter()
方法描述:对数组的每个元素执行一次指定的函数,并返回一个新的数组,其中包含函数返回值为 true 的元素。
语法:array.filter(callback(currentValue, index, array))
示例:
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(function(num) {
return num % 2 === 0;
});
console.log(evenNumbers); // [2, 4]
reduce()
方法描述:对数组中的所有元素执行一次指定的函数,然后返回一个累积的结果值。
语法:array.reduce(callback(accumulator, currentValue, index, array), initialValue)
示例:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(function(total, num) {
return total + num;
}, 0);
console.log(sum); // 15
3. 查找数组元素
indexOf()
方法描述:返回数组中第一个匹配给定值的元素的索引,如果没有找到,则返回 -1。
语法:array.indexOf(searchElement, fromIndex)
示例:
const fruits = ['apple', 'banana', 'orange'];
const index = fruits.indexOf('banana');
console.log(index); // 1
lastIndexOf()
方法描述:返回数组中最后一个匹配给定值的元素的索引,如果没有找到,则返回 -1。
语法:array.lastIndexOf(searchElement, fromIndex)
示例:
const fruits = ['apple', 'banana', 'orange', 'banana'];
const index = fruits.lastIndexOf('banana');
console.log(index); // 3
includes()
方法描述:判断数组是否包含给定值,如果包含,则返回 true,否则返回 false。
语法:array.includes(searchElement, fromIndex)
示例:
const fruits = ['apple', 'banana', 'orange'];
const isIncluded = fruits.includes('banana');
console.log(isIncluded); // true
4. 数组排序和过滤
sort()
方法描述:对数组元素进行排序,并返回修改后的数组。其中可以传入一个函数来进行比较,传入前后两个值,如果返回值为正数,则交换两个参数的位置。
语法:array.sort(compareFunction)
示例:
const fruits = ['apple', 'banana', 'orange'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'orange']
如果要按照数字进行比较排序,可以使用如下的比较函数:
const numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
reverse()
方法描述:颠倒数组中元素的顺序,并返回修改后的数组。
语法:array.reverse()
示例:
const fruits = ['apple', 'banana', 'orange'];
fruits.reverse();
console.log(fruits); // ['orange', 'banana', 'apple']
filter()
方法描述:创建一个新数组,其中包含通过指定函数测试的所有元素。
语法:array.filter(callback(currentValue, index, array))
示例:
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(function(num) {
return num % 2 === 0;
});
console.log(evenNumbers); // [2, 4]
find()
方法描述:返回数组中通过指定函数测试的第一个元素的值,如果没有找到,则返回 undefined。
语法:array.find(callback(currentValue, index, array))
示例:
const fruits = ['apple', 'banana', 'orange'];
const result = fruits.find(function(fruit) {
return fruit === 'banana';
});
console.log(result); // 'banana'
findIndex()
方法描述:返回数组中通过指定函数测试的第一个元素的索引,如果没有找到,则返回 -1。
语法:array.findIndex(callback(currentValue, index, array))
示例:
const fruits = ['apple', 'banana', 'orange'];
const index = fruits.findIndex(function(fruit) {
return fruit === 'banana';
});
console.log(index); // 1
join()
方法描述:将数组中的所有元素转化为一个字符串并返回,可以使用一个可选参数作为分隔符来指定各个元素之间的连接方式。
语法:array.join(separator)
示例:
const fruits = ["apple", "banana", "orange"];
const str = fruits.join("-"); // "apple-banana-orange"
toString()
方法描述:
toString() 方法将数组中的所有元素转化为一个字符串并返回,和 join() 方法不同的是,toString() 方法没有分隔符参数,使用逗号分隔。
语法:array.toString()
示例:
const fruits = ["apple", "banana", "orange"];
const str = fruits.toString();//"apple,banana,orange"
toLocaleString()
方法描述:将数组中的所有元素转化为一个本地化后的字符串并返回。和 toString() 方法一样,toLocaleString() 方法也没有分隔符参数,使用逗号分隔。
语法:array.toLocaleString()
示例:
const numbers = [1000, 2000, 3000];
const str = numbers.toLocaleString();
// "1,000, 2,000, 3,000"(如果当前本地化环境中的数字格式为千位分隔符)
5. 数组操作
concat()
方法描述:返回一个新数组,该数组是由两个或多个数组组合而成的。
语法:array.concat(array1, array2, ..., arrayN)
示例:
const numbers1 = [1, 2, 3];
const numbers2 = [4, 5, 6];
const mergedNumbers = numbers1.concat(numbers2);
console.log(mergedNumbers); // [1, 2, 3, 4, 5, 6]
slice()
方法描述:返回一个新数组,其中包含从开始到结束(不包括结束)选择的元素。
语法:array.slice(start, end)
示例:
const fruits = ['apple', 'banana', 'orange', 'pear'];
const selectedFruits = fruits.slice(1, 3);
console.log(selectedFruits); // ['banana', 'orange']
splice()
方法描述:向/从数组中添加/删除元素,并返回被删除元素的数组。
语法:array.splice(start, deleteCount, item1, item2, ..., itemN)
示例:
const numbers = [1, 2, 3, 4, 5];
numbers.splice(2, 1); // 删除下标为2的元素
console.log(numbers); // [1, 2, 4, 5]
numbers.splice(2, 0, 3); // 在下标