JS中数组方法

160 阅读5分钟
        JavaScript 数组是一种用于存储多个值的数据结构,它提供了许多原生方法用于对数组进行操作。

分类:

  1. 修改数组的内容push()pop()unshift()shift()splice()fill()

  2. 遍历数组forEach()map()filter()reduce()

  3. 查找数组元素indexOf()lastIndexOf()includes()

  4. 数组排序和过滤sort()reverse()filter()find()findIndex()join()toString()toLocaleString()

  5. 合并和分割数组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);  // 在下标