【JS】JS基础-数组方法

一、 会改变原数组的方法 (Mutator Methods)

这些方法会修改调用它们的数组本身。

  1. push()

    • 作用:在数组的末尾添加一个或多个元素。

    • 返回值:数组新的 length

    • 示例

      let arr = [1, 2];
      let newLength = arr.push(3, 4); 
      console.log(arr); // [1, 2, 3, 4]
      console.log(newLength); // 4
      
  2. pop()

    • 作用:删除并返回数组的最后一个元素。

    • 返回值:被删除的元素。如果数组为空则返回 undefined

    • 示例

      let arr = [1, 2, 3];
      let lastElement = arr.pop(); 
      console.log(arr); // [1, 2]
      console.log(lastElement); // 3
      
  3. unshift()

    • 作用:在数组的开头添加一个或多个元素。

    • 返回值:数组新的 length

    • 示例

      let arr = [3, 4];
      let newLength = arr.unshift(1, 2); 
      console.log(arr); // [1, 2, 3, 4]
      console.log(newLength); // 4
      
  4. shift()

    • 作用:删除并返回数组的第一个元素。

    • 返回值:被删除的元素。如果数组为空则返回 undefined

    • 示例

      let arr = [1, 2, 3];
      let firstElement = arr.shift(); 
      console.log(arr); // [2, 3]
      console.log(firstElement); // 1
      
  5. splice() - 功能最强大的数组修改方法

    • 作用:通过删除、替换现有元素或添加新元素来修改数组。

    • 参数start (起始索引), deleteCount (要删除的元素个数), item1, item2, ... (要添加的元素)。

    • 返回值:由被删除的元素组成的数组。

    • 示例

      let arr = ['a', 'b', 'c', 'd'];
      // 删除:从索引1开始,删除2个元素
      let removed = arr.splice(1, 2); 
      console.log(arr); // ['a', 'd']
      console.log(removed); // ['b', 'c']
      
      // 添加:从索引1开始,删除0个元素,添加'x', 'y'
      arr.splice(1, 0, 'x', 'y'); 
      console.log(arr); // ['a', 'x', 'y', 'd']
      
      // 替换:从索引1开始,删除2个元素,添加'z'
      arr.splice(1, 2, 'z'); 
      console.log(arr); // ['a', 'z', 'd']
      
  6. reverse()

    • 作用:将数组中元素的位置颠倒。

    • 返回值:颠倒后的原数组(引用)。

    • 示例

      let arr = [1, 2, 3];
      arr.reverse();
      console.log(arr); // [3, 2, 1]
      
  7. sort()

    • 作用:对数组的元素进行排序(默认按字符串Unicode码点)。

    • 参数compareFunction (可选,定义排序顺序的函数)。

    • 返回值:排序后的原数组(引用)。

    • 示例

      let arr = [3, 1, 4, 1, 5];
      arr.sort(); // 默认排序
      console.log(arr); // [1, 1, 3, 4, 5]
      
      // 数字升序排序
      arr.sort((a, b) => a - b); 
      console.log(arr); // [1, 1, 3, 4, 5]
      
      // 数字降序排序
      arr.sort((a, b) => b - a); 
      console.log(arr); // [5, 4, 3, 1, 1]
      
  8. copyWithin() (ES6)

    • 作用:浅复制数组的一部分到同一数组中的另一个位置。

    • 参数target (复制到的目标起始索引), start (复制源的起始索引,默认为0), end (复制源的结束索引,默认为数组长度)。

    • 返回值:改变后的数组。

    • 示例

      let arr = [1, 2, 3, 4, 5];
      arr.copyWithin(0, 3); // 将索引3到末尾的元素,复制到索引0
      console.log(arr); // [4, 5, 3, 4, 5]
      
  9. fill() (ES6)

    • 作用:用一个固定值填充数组中从起始索引到终止索引内的全部元素。

    • 参数value (填充值), start (起始索引,可选), end (结束索引,可选)。

    • 返回值:修改后的数组。

    • 示例

      let arr = new Array(3); // [empty × 3]
      arr.fill(1);
      console.log(arr); // [1, 1, 1]
      
      let arr2 = [1, 2, 3, 4];
      arr2.fill(0, 1, 3); // 用0填充索引1到3(不包括3)
      console.log(arr2); // [1, 0, 0, 4]
      

二、 不会改变原数组的方法 (Accessor Methods)

这些方法不会修改原数组,而是返回一个新的数组或其他值。

  1. concat()

    • 作用:合并两个或多个数组。

    • 返回值:一个新的合并后的数组。

    • 示例

      let arr1 = [1, 2];
      let arr2 = [3, 4];
      let newArr = arr1.concat(arr2, [5, 6]);
      console.log(newArr); // [1, 2, 3, 4, 5, 6]
      console.log(arr1); // [1, 2] (原数组未改变)
      
  2. join()

    • 作用:将数组的所有元素连接成一个字符串。

    • 参数separator (分隔符,默认为逗号 ,)。

    • 返回值:连接后的字符串。

    • 示例

      let arr = ['Hello', 'World'];
      let str = arr.join(' '); 
      console.log(str); // "Hello World"
      
  3. slice()

    • 作用:返回数组的一个浅拷贝的一部分。

    • 参数start (起始索引), end (结束索引,不包括该索引的元素)。

    • 返回值:一个新的数组,包含从 startend(不包括 end)的元素。

    • 示例

      let arr = [1, 2, 3, 4, 5];
      let part1 = arr.slice(1, 3); // 从索引1开始,到索引3(不包括3)
      console.log(part1); // [2, 3]
      
      let part2 = arr.slice(2); // 从索引2开始到末尾
      console.log(part2); // [3, 4, 5]
      
      let copy = arr.slice(); // 无参数,复制整个数组(浅拷贝)
      console.log(copy); // [1, 2, 3, 4, 5]
      
  4. indexOf()

    • 作用:返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。

    • 参数searchElement (要查找的元素), fromIndex (开始查找的位置,可选)。

    • 返回值:首个被找到的元素的索引,或 -1。

    • 示例

      let arr = [1, 2, 3, 2, 1];
      console.log(arr.indexOf(2)); // 1
      console.log(arr.indexOf(2, 2)); // 3 (从索引2开始找)
      console.log(arr.indexOf(4)); // -1
      
  5. lastIndexOf()

    • 作用:返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找。

    • 参数:同上。

    • 返回值:最后一个被找到的元素的索引,或 -1。

    • 示例

      let arr = [1, 2, 3, 2, 1];
      console.log(arr.lastIndexOf(2)); // 3
      console.log(arr.lastIndexOf(1)); // 4
      
  6. includes() (ES7)

    • 作用:判断一个数组是否包含一个指定的值。

    • 参数valueToFind (需要查找的元素值), fromIndex (可选)。

    • 返回值:布尔值 (truefalse)。

    • 示例

      let arr = [1, 2, 3];
      console.log(arr.includes(2)); // true
      console.log(arr.includes(4)); // false
      console.log(arr.includes(2, 2)); // false (从索引2开始找,找不到2)
      
  7. toString() & toLocaleString()

    • 作用:返回一个表示数组中所有元素的字符串。

    • 返回值:字符串。

    • 示例

      let arr = [1, 2, 3, 'a', 'b'];
      console.log(arr.toString()); // "1,2,3,a,b"
      

三、 迭代方法 (Iteration Methods)

这些方法用于遍历数组元素,并对每个元素执行提供的函数。

  1. forEach()

    • 作用:对数组的每个元素执行一次给定的函数。

    • 返回值undefined

    • 示例

      let arr = [1, 2, 3];
      arr.forEach((item, index, array) => {
        console.log(item * 2, index);
      });
      // 输出: 
      // 2 0
      // 4 1
      // 6 2
      
  2. map()

    • 作用:创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。

    • 返回值:一个新的由函数返回值组成的数组。

    • 示例

      let arr = [1, 2, 3];
      let doubled = arr.map(item => item * 2);
      console.log(doubled); // [2, 4, 6]
      console.log(arr); // [1, 2, 3] (原数组不变)
      
  3. filter()

    • 作用:创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

    • 返回值:一个新的通过测试的元素组成的数组。

    • 示例

      let arr = [1, 2, 3, 4, 5, 6];
      let evens = arr.filter(item => item % 2 === 0);
      console.log(evens); // [2, 4, 6]
      
  4. find() (ES6)

    • 作用:返回数组中满足提供的测试函数的第一个元素的值

    • 返回值:第一个匹配的元素,否则返回 undefined

    • 示例

      let users = [
        { id: 1, name: 'John' },
        { id: 2, name: 'Jane' }
      ];
      let user = users.find(user => user.id === 2);
      console.log(user); // { id: 2, name: 'Jane' }
      
  5. findIndex() (ES6)

    • 作用:返回数组中满足提供的测试函数的第一个元素的索引

    • 返回值:第一个匹配元素的索引,否则返回 -1。

    • 示例

      let arr = [5, 12, 8, 130, 44];
      let index = arr.findIndex(item => item > 10);
      console.log(index); // 1 (12的索引)
      
  6. some()

    • 作用:测试数组中是不是至少有一个元素通过了提供的函数的测试。

    • 返回值:布尔值。只要有一个元素通过测试即为 true

    • 示例

      let arr = [1, 2, 3, 4, 5];
      let hasEven = arr.some(item => item % 2 === 0);
      console.log(hasEven); // true
      
  7. every()

    • 作用:测试数组中的所有元素是否都通过了提供的函数的测试。

    • 返回值:布尔值。所有元素都通过测试才为 true

    • 示例

      let arr = [2, 4, 6, 8];
      let allEven = arr.every(item => item % 2 === 0);
      console.log(allEven); // true
      
      let arr2 = [2, 4, 5, 8];
      console.log(arr2.every(item => item % 2 === 0)); // false
      
  8. reduce()

    • 作用:对数组中的每个元素执行一个由您提供的 reducer 函数,将其结果汇总为单个返回值。

    • 参数callback(accumulator, currentValue, index, array), initialValue (初始值,可选)。

    • 返回值:累积处理后的最终结果。

    • 示例

      let arr = [1, 2, 3, 4];
      let sum = arr.reduce((acc, current) => acc + current, 0);
      console.log(sum); // 10
      
      // 计算元素出现次数
      let fruits = ['apple', 'banana', 'orange', 'apple'];
      let count = fruits.reduce((acc, fruit) => {
        acc[fruit] = (acc[fruit] || 0) + 1;
        return acc;
      }, {});
      console.log(count); // { apple: 2, banana: 1, orange: 1 }
      
  9. reduceRight()

    • 作用:与 reduce() 相同,但从右向左执行。

四、 其他方法

  1. Array.isArray() (静态方法)

    • 作用:用于确定传递的值是否是一个 Array

    • 返回值:布尔值。

    • 示例

      console.log(Array.isArray([1, 2, 3])); // true
      console.log(Array.isArray({})); // false
      console.log(Array.isArray('hello')); // false
      
  2. Array.from() (静态方法,ES6)

    • 作用:从一个类似数组或可迭代对象创建一个新的、浅拷贝的数组实例。

    • 示例

      // 从字符串创建
      console.log(Array.from('foo')); // ['f', 'o', 'o']
      
      // 从Set创建
      console.log(Array.from(new Set([1, 2, 1]))); // [1, 2]
      
      // 从类数组对象(如arguments)创建
      function f() {
        return Array.from(arguments);
      }
      console.log(f(1, 2, 3)); // [1, 2, 3]
      
  3. Array.of() (静态方法,ES6)

    • 作用:创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。与 new Array() 的行为不同。

    • 示例

      let arr1 = Array.of(7); // 创建一个包含单个元素7的数组
      console.log(arr1); // [7]
      
      let arr2 = Array.of(1, 2, 3); 
      console.log(arr2); // [1, 2, 3]
      
      // 对比 new Array()
      let arr3 = new Array(7); // 创建一个长度为7的空数组
      console.log(arr3); // [empty × 7]
      
  4. flat() (ES2019)

    • 作用:按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

    • 参数depth (指定要提取嵌套数组的结构深度,默认值为 1)。

    • 返回值:一个新的扁平化后的数组。

    • 示例

      let arr1 = [1, 2, [3, 4]];
      console.log(arr1.flat()); // [1, 2, 3, 4]
      
      let arr2 = [1, 2, [3, 4, [5, 6]]];
      console.log(arr2.flat()); // [1, 2, 3, 4, [5, 6]] (默认深度1)
      console.log(arr2.flat(2)); // [1, 2, 3, 4, 5, 6] (深度2)
      
  5. flatMap() (ES2019)

    • 作用:首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。相当于 map() 后紧接着 flat()(深度为1)。

    • 返回值:一个新的数组。

    • 示例

      let arr = [1, 2, 3];
      let result = arr.flatMap(x => [x * 2]);
      console.log(result); // [2, 4, 6]
      
      // 相当于 [[2], [4], [6]].flat()
      let arr2 = ["今天天气很好", "", "早上好"];
      let words = arr2.flatMap(sentence => sentence.split(' '));
      console.log(words); // ['今天天气很好', '', '早上好'] (自动去除了空字符串分割后的空数组)
      

总结表格

方法改变原数组?返回值类别
pushlength修改
pop被删除的元素修改
unshiftlength修改
shift被删除的元素修改
splice被删除元素组成的数组修改
reverse颠倒后的原数组修改
sort排序后的原数组修改
copyWithin改变后的数组修改
fill修改后的数组修改
concat新数组访问
join字符串访问
slice新数组(浅拷贝)访问
indexOf索引/-1访问
lastIndexOf索引/-1访问
includes布尔值访问
toString字符串访问
forEachundefined迭代
map新数组迭代
filter新数组迭代
find元素/undefined迭代
findIndex索引/-1迭代
some布尔值迭代
every布尔值迭代
reduce累积值迭代
reduceRight累积值迭代
Array.isArray-布尔值静态
Array.from-新数组静态
Array.of-新数组静态
flat新数组其他
flatMap新数组其他

希望这份详细的总结对你有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝莓味的口香糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值