JavaScript关于数组的四道面试题

yizhihongxing

以下是JavaScript关于数组的四道面试题的详细攻略:

面试题一:如何将数组扁平化?

问题描述

给定一个多维数组,如何将其转为一维数组,即扁平化?

解决方案

我们可以使用ES6的 flat 方法,该方法接收一个可选参数depth,指定展开的深度。当不传depth时,默认展开所有层级。

同时,为了兼容性,我们也可以使用递归实现深度优先的扁平化。

示例代码如下:

// 使用 flat 方法
const arr = [1,2,[3,4,[5,6]]];
const flatArr1 = arr.flat(Infinity);
console.log(flatArr1); // [1, 2, 3, 4, 5, 6]

// 使用递归实现深度优先的扁平化
function flatten(arr) {
   let result = [];

   arr.forEach(item => {
      if(Array.isArray(item)){
         result = result.concat(flatten(item));
      }else{
         result.push(item);
      }
   });

   return result;
}

const flatArr2 = flatten([1,2,[3,4,[5,6]]]);
console.log(flatArr2); // [1, 2, 3, 4, 5, 6]

面试题二:将数组中的元素乱序排列

问题描述

给定一个数组,如何将其中的元素乱序排列?

解决方案

我们可以使用Fisher-Yates洗牌算法,该算法的思路是从最后一个元素开始,依次将当前元素与之前的随机一个元素交换位置,直到遍历到第一个元素。

示例代码如下:

function shuffle(arr) {
   for (let i = arr.length - 1; i > 0; i--) {
      let j = Math.floor(Math.random() * (i + 1));
      [arr[i], arr[j]] = [arr[j], arr[i]];
   }
   return arr;
}

const arr = [1,2,3,4,5];
console.log(shuffle(arr)); // 可能输出 [5, 2, 1, 4, 3] 或 [3, 5, 4, 2, 1] 等等

面试题三:如何去重并排序数组?

问题描述

给定一个数组,如何去除其中的重复元素并按升序排序?

解决方案

我们可以使用Set去重,然后使用sort方法对去重后的数组进行排序。

示例代码如下:

const arr = [5, 2, 3, 4, 5, 1, 2];
const uniqueArr = [...new Set(arr)].sort((a, b) => a - b);
console.log(uniqueArr); // [1, 2, 3, 4, 5]

面试题四:如何查找数组中的重复元素?

问题描述

给定一个数组,如何查找其中的重复元素?

解决方案

我们可以使用一个对象或Map记录每个元素出现的次数,然后根据出现次数筛选出重复的元素。

示例代码如下:

const arr = [5, 2, 3, 4, 5, 1, 2];

// 使用 Map
function findDuplicates(arr) {
   const map = new Map();
   const result = [];

   arr.forEach((item) => {
      const count = map.get(item) || 0;
      map.set(item, count + 1); 
   });

   map.forEach((count, item) => {
      if(count > 1) result.push(item);
   });

   return result;
}

console.log(findDuplicates(arr)); // [2, 5]

// 使用普通对象
function findDuplicates2(arr) {
   const obj = {};
   const result = [];

   for (let i = 0; i < arr.length; i++) {
      const count = obj[arr[i]] || 0;
      obj[arr[i]] = count + 1;
   }

   for (const key in obj) {
      if (obj.hasOwnProperty(key) && obj[key] > 1) {
         result.push(+key);
      }
   }

   return result;
}

console.log(findDuplicates2(arr)); // [2, 5]

以上就是 JavaScript 关于数组的四道面试题的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript关于数组的四道面试题 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 通过event对象的fromElement属性解决热区设置主实体的一个bug

    对于Web开发过程中,经常会涉及到鼠标移动事件,而其中一个常见的问题就是热区设置时容易出现主实体与热区之间相互触发的问题。这时,我们可以通过event对象的fromElement属性来解决这个问题。 什么是event对象? 在JavaScript中,event对象包含了当前页面中发生的事件的相关信息,例如事件类型、事件的目标元素等。当事件触发时,浏览器会自动…

    JavaScript 2023年6月10日
    00
  • javascript if条件判断方法小结

    下面为大家详细讲解“JavaScript if条件判断方法小结”的完整攻略。 1. if条件语句 if语句是JavaScript中最常用的条件判断语句。它的基本语法结构如下: if (condition) { // 如果condition为真,则执行这里的代码 } else { // 如果condition为假,则执行这里的代码 } 其中,condition…

    JavaScript 2023年6月10日
    00
  • JS异步堆栈追踪之为什么await胜过Promise

    JS异步堆栈追踪是一项非常重要的技能,它能够帮助我们深入理解JavaScript异步编程模型。在这篇攻略中,我将详细讲解为什么await胜过Promise,并提供两个示例来帮助解释这个问题。 为什么await胜过Promise 在讲解为什么await胜过Promise之前,我们需要先探讨Promise的一些限制。Promise是一种典型的异步编程模型,它可以…

    JavaScript 2023年5月28日
    00
  • js捆绑TypeScript声明文件的方法教程

    下面是详细讲解“js捆绑TypeScript声明文件的方法教程”的完整攻略: 什么是TypeScript声明文件? TypeScript声明文件是描述JavaScript代码的接口和类型的文件,可以方便地为JavaScript代码提供静态类型检查和智能提示。 捆绑TypeScript声明文件的方法 方法一:使用@types包 @types包是一种官方推荐的捆…

    JavaScript 2023年5月27日
    00
  • js中prototype用法详细介绍

    “js中prototype用法详细介绍”的攻略如下: 1. 什么是prototype 在javascript中,每个对象有一个特殊的属性__proto__,指向其构造函数的原型对象(prototype)。原型对象中存储着对象的方法和属性。使用原型机制,可以使所有对象共享相同的属性和方法,而不必为每个对象创建副本。 2. 为什么需要prototype 在jav…

    JavaScript 2023年6月10日
    00
  • JavaScript forEach()遍历函数使用及介绍

    JavaScript forEach()遍历函数使用及介绍 什么是forEach()函数 forEach()是JavaScript中的一个数组遍历方法。它允许您迭代数组中的每个项,并对它们执行一个回调函数。 forEach()函数的语法 forEach()函数的语法如下: array.forEach((value, index, array) => {…

    JavaScript 2023年5月27日
    00
  • JavaScript的Cookies

    JavaScript的Cookies 什么是Cookies Cookies是存储于用户浏览器中的一小块数据,此数据在用户在互联网上访问同一个网站时会被一同发送到网站服务器上。Cookies最初用于记录用户的数据,以便稍后再次访问时使用。例如,当你在某个网站购物时,浏览器会保存你的购物篮信息,以便你关闭浏览器之后可以再次访问购物篮。Cookies可以在网站服务…

    JavaScript 2023年6月11日
    00
  • ES6中的rest参数与扩展运算符详解

    ES6中的rest参数与扩展运算符详解 在ES6中,新增了rest参数和扩展运算符这两个语法特性,它们在函数的参数传递过程中非常有用。本文将详细讲解它们的用法和示例。 Rest参数 在ES6中,可以使用rest参数来表示不定数量的参数。具体来说,rest参数是一个数组,它包含了所有传入函数中的不定参数,我们可以使用类似于普通数组的方法来操作它。 functi…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部