返回

js数组面试题:JavaScript数组面试题,高频必考知识点全解析

来源:网络   作者:   日期:2025-10-29 10:32:34  

JavaScript作为前端开发的核心语言,数组(Array)是其最基础且使用频率极高的数据结构之一,在前端开发者的求职面试中,数组相关的题目几乎成为了必考点,本文将系统梳理JavaScript数组的高频面试题,从基础概念到复杂场景,帮助开发者全面掌握这一知识点。

基础概念类题目

  1. JavaScript中数组的本质是什么?

    解析:数组是基于对象的动态列表,通过整数索引访问元素,虽然Array.prototype.slice等方法会创建新数组,但数组本身是引用类型。

  2. 如何判断一个变量是数组?

    js数组面试题:JavaScript数组面试题,高频必考知识点全解析

    // 方法1:使用 instanceof
    const arr = [1,2,3];
    arr instanceof Array; // true
    // 方法2:使用 Array.isArray()(推荐)
    Array.isArray(arr); // true
    // 方法3:使用 Object.prototype.toString.call()
    Object.prototype.toString.call(arr); // "[object Array]"

数组操作类题目

  1. 实现一个数组去重函数

    // ES6解法
    function unique(arr) {
      return [...new Set(arr)];
    }
    // 传统解法
    function unique(arr) {
      const result = [];
      for (let i = 0; i < arr.length; i++) {
        if (!result.includes(arr[i])) {
          result.push(arr[i]);
        }
      }
      return result;
    }
  2. 实现数组的map方法

    Array.prototype.myMap = function(callback) {
      const newArray = [];
      for (let i = 0; i < this.length; i++) {
        newArray.push(callback(this[i], i, this));
      }
      return newArray;
    };

数组遍历类题目

  1. forEach、map、reduce的区别

    js数组面试题:JavaScript数组面试题,高频必考知识点全解析

    • forEach:不返回新数组,主要用于遍历操作
    • map:返回新数组,元素根据回调函数修改
    • reduce:累加器,从左到右处理元素,最终返回单一值
  2. 如何遍历数组的索引和元素

    // 方法1:使用 for 循环
    for (let i = 0; i < arr.length; i++) {
      console.log(i, arr[i]);
    }
    // 方法2:使用 for...of
    for (const [index, element] of arr.entries()) {
      console.log(index, element);
    }

数组转换类题目

  1. 实现数组转字符串

    const str = arr.join(','); // 使用默认分隔符
    const strWithCustom = arr.join(' - ');
  2. 实现数组扁平化

    js数组面试题:JavaScript数组面试题,高频必考知识点全解析

    // ES6解法
    function flatten(arr) {
      return arr.flat(Infinity);
    }
    // 递归实现
    function flatten(arr) {
      let result = [];
      for (let item of arr) {
        if (Array.isArray(item)) {
          result = result.concat(flatten(item));
        } else {
          result.push(item);
        }
      }
      return result;
    }

数组合并类题目

  1. 实现数组合并

    // 方法1:使用 concat
    const newArr = arr1.concat(arr2);
    // 方法2:使用 spread operator
    const newArr = [...arr1, ...arr2];

数组排序类题目

  1. 实现数组排序

    // 数字排序
    arr.sort((a, b) => a - b);
    // 字符串排序(按字母顺序)
    arr.sort();
    // 自定义排序
    arr.sort((a, b) => {
      if (a.age < b.age) return -1;
      if (a.age > b.age) return 1;
      return 0;
    });

数组深拷贝类题目

  1. 实现数组深拷贝

    function deepClone(obj) {
      if (typeof obj !== 'object' || obj === null) return obj;
      const newObj = Array.isArray(obj) ? [] : {};
      for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
          newObj[key] = deepClone(obj[key]);
        }
      }
      return newObj;
    }

数组性能优化类题目

  1. 如何高效地实现数组去重?
    • 使用Set数据结构是最优解,时间复杂度O(n)
    • 避免使用双重循环,会导致O(n²)的时间复杂度

面试官常问的陷阱题

  1. 以下代码会输出什么?

    const arr = ['a', 'b', 'c'];
    arr[100] = 'd';
    console.log(arr.length); // 101
    console.log(arr[3]); // undefined
  2. 数组长度修改的特殊性

    const arr = [1,2,3];
    arr.length = 2;
    console.log(arr); // [1,2]
    arr.length = 4;
    console.log(arr); // [1,2,3,4](新增元素为undefined)

学习建议

  1. 系统学习:建议通过《JavaScript高级程序设计》等经典书籍系统学习数组API
  2. 动手实践:在LeetCode、CodeWars等平台练习数组相关题目
  3. 关注性能:了解不同方法的时间复杂度,选择最优解法
  4. 深入理解:研究JavaScript引擎对数组的实现机制

掌握JavaScript数组相关知识是前端开发的基础,也是面试中的重点考察内容,希望本文能帮助开发者系统复习数组知识,从容应对面试挑战,面试不仅是考察技术能力,更是考察解决问题的思路和方法。

分类:编程
责任编辑:今题网
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

文章已关闭评论!