面试题:JavaScript中操作数组的方法有哪些?

1. 添加元素

  • push():在数组的末尾添加一个或多个元素,并返回新的长度。

    let arr = [1, 2, 3];
    arr.push(4); // arr 现在是 [1, 2, 3, 4]
  • unshift():在数组的开头添加一个或多个元素,并返回新的长度。

    let arr = [1, 2, 3];
    arr.unshift(0); // arr 现在是 [0, 1, 2, 3]

2. 删除元素

  • pop():删除数组的最后一个元素,并返回该元素。

    let arr = [1, 2, 3];
    let last = arr.pop(); // last 是 3, arr 现在是 [1, 2]
  • shift():删除数组的第一个元素,并返回该元素。

    let arr = [1, 2, 3];
    let first = arr.shift(); // first 是 1, arr 现在是 [2, 3]
  • splice():通过删除或替换现有元素或者原地添加新的元素来修改数组。

    let arr = [1, 2, 3, 4, 5];
    arr.splice(2, 1); // 从索引 2 开始删除 1 个元素, arr 现在是 [1, 2, 4, 5]
    arr.splice(1, 0, 'a', 'b'); // 在索引 1 处插入 'a' 和 'b', arr 现在是 [1, 'a', 'b', 2, 4, 5]

3. 合并和连接

  • concat():合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
    let arr1 = [1, 2];
    let arr2 = [3, 4];
    let arr3 = arr1.concat(arr2); // arr3 是 [1, 2, 3, 4]

4. 查找元素

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

    let arr = [1, 2, 3, 4];
    let index = arr.indexOf(3); // index 是 2
  • lastIndexOf():返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。

    let arr = [1, 2, 3, 2, 1];
    let index = arr.lastIndexOf(2); // index 是 3
  • includes():判断一个数组是否包含一个指定的值,返回布尔值。

    let arr = [1, 2, 3];
    let hasTwo = arr.includes(2); // hasTwo 是 true
  • find():返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

    let arr = [5, 12, 8, 130, 44];
    let found = arr.find(element => element > 10); // found 是 12
  • findIndex():返回数组中满足提供的测试函数的第一个元素的索引。否则返回 -1。

    let arr = [5, 12, 8, 130, 44];
    let foundIndex = arr.findIndex(element => element > 10); // foundIndex 是 1

5. 遍历和映射

  • forEach():对数组的每个元素执行一次提供的函数。

    let arr = [1, 2, 3];
    arr.forEach(element => console.log(element)); // 输出 1, 2, 3
  • map():创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。

    let arr = [1, 2, 3];
    let newArr = arr.map(element => element * 2); // newArr 是 [2, 4, 6]

6. 过滤和归约

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

    let arr = [1, 2, 3, 4];
    let filteredArr = arr.filter(element => element > 2); // filteredArr 是 [3, 4]
  • reduce():对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。

    let arr = [1, 2, 3, 4];
    let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0); // sum 是 10

7. 其他

  • slice():返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括 end)。

    let arr = [1, 2, 3, 4, 5];
    let subArr = arr.slice(1, 4); // subArr 是 [2, 3, 4]
  • reverse():颠倒数组中元素的顺序。

    let arr = [1, 2, 3];
    arr.reverse(); // arr 现在是 [3, 2, 1]
  • sort():对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的。

    let arr = [3, 1, 4, 1, 5];
    arr.sort((a, b) => a - b); // arr 现在是 [1, 1, 3, 4, 5]

es6中的新方法:

1. Array.from()

  • 功能:将类数组对象(如 argumentsNodeList)或可迭代对象(如 SetMap)转换为真正的数组。
  • 示例
    const arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
    const arr = Array.from(arrayLike); // ['a', 'b', 'c']

2. Array.of()

  • 功能:创建一个新的数组实例,无论参数的数量或类型如何。
  • 示例
    const arr = Array.of(1, 2, 3); // [1, 2, 3]
    const singleElementArr = Array.of(5); // [5]

3. find()

  • 功能:返回数组中第一个满足提供的测试函数的元素的值,否则返回 undefined
  • 示例
    const arr = [1, 2, 3, 4];
    const found = arr.find(x => x > 2); // 3

4. findIndex()

  • 功能:返回数组中第一个满足提供的测试函数的元素的索引,否则返回 -1
  • 示例
    const arr = [1, 2, 3, 4];
    const index = arr.findIndex(x => x > 2); // 2

5. fill()

  • 功能:用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
  • 示例
    const arr = [1, 2, 3, 4];
    arr.fill(0, 1, 3); // [1, 0, 0, 4]

6. copyWithin()

  • 功能:在数组内部,将指定位置的成员复制到其他位置,返回当前数组。
  • 示例
    const arr = [1, 2, 3, 4];
    arr.copyWithin(1, 2); // [1, 3, 4, 4]

7. entries()

  • 功能:返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对。
  • 示例
    const arr = ['a', 'b', 'c'];
    for (const [index, value] of arr.entries()) {
    console.log(index, value);
    }
    // 输出:
    // 0 'a'
    // 1 'b'
    // 2 'c'

8. keys()

  • 功能:返回一个新的数组迭代器对象,该对象包含数组中每个索引的键。
  • 示例
    const arr = ['a', 'b', 'c'];
    for (const key of arr.keys()) {
    console.log(key);
    }
    // 输出:
    // 0
    // 1
    // 2

9. values()

  • 功能:返回一个新的数组迭代器对象,该对象包含数组中每个索引的值。
  • 示例
    const arr = ['a', 'b', 'c'];
    for (const value of arr.values()) {
    console.log(value);
    }
    // 输出:
    // 'a'
    // 'b'
    // 'c'

10. includes()

  • 功能:判断一个数组是否包含一个指定的值,返回布尔值。
  • 示例
    const arr = [1, 2, 3, 4];
    console.log(arr.includes(3)); // true
    console.log(arr.includes(5)); // false

11. 扩展运算符(...

  • 功能:用于展开数组或可迭代对象,可以用于数组的复制、合并等操作。
  • 示例
    const arr1 = [1, 2];
    const arr2 = [3, 4];
    const combined = [...arr1, ...arr2]; // [1, 2, 3, 4]

12. flatMap()

  • 功能:首先对数组中的每个元素调用一个映射函数,然后将结果“扁平化”成一个新数组(默认只扁平化一层)。
  • 示例
    const arr = [1, 2, 3];
    const result = arr.flatMap(x => [x, x * 2]); // [1, 2, 2, 4, 3, 6]

13. flat()

  • 功能:按照指定的深度递归地将数组“扁平化”。
  • 示例
    const arr = [1, [2, [3, [4]]]];
    const flattened = arr.flat(2); // [1, 2, 3, [4]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值