JavaScript关于数组的四道面试题

以下是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日

相关文章

  • JavaScript编码风格指南(中文版)

    JavaScript编码风格指南(中文版)攻略 一、什么是编码风格指南? 编码风格指南是一份约定俗成的规范,用于统一团队内的代码编写风格,包括缩进、空格、命名规则等方面。编码风格指南的好处是可以让代码更加统一、易读、易维护,提高代码质量和开发效率。 二、为什么要使用编码风格指南? 统一团队内部的代码风格,减少开发者之间因个人习惯造成的差异,方便团队合作和代码…

    JavaScript 2023年6月10日
    00
  • JavaScript实现PC端横向轮播图

    下面是JavaScript实现PC端横向轮播图的完整攻略: 准备工作 要实现PC端横向轮播图,需要先准备好以下几点: HTML结构,即容器元素及其子元素,通常是一个div包裹符合数量的图片(img标签)。 CSS样式,如容器元素宽高、溢出隐藏、子元素浮动、统一宽高等。 JS代码,用来实现轮播图的滑动效果,具体实现方式后面会讲到。 实现步骤 确认容器元素的宽度…

    JavaScript 2023年6月11日
    00
  • JavaScript你不知道的一些数组方法

    下面是详细讲解“JavaScript你不知道的一些数组方法”的完整攻略。 一、前言 JavaScript 中数组是非常常用的数据结构,JS 对数组的操作也非常丰富。其中一些方法在日常的开发中比较常见,比如push、pop、shift和unshift等等,但是还有一些方法很少被知道或使用,这些方法不仅可以提高效率,还可以让代码更加优美。 本篇攻略主要介绍 Ja…

    JavaScript 2023年5月27日
    00
  • 原生JavaScrpit中异步请求Ajax实现方法

    原生JavaScript中异步请求Ajax实现方法 什么是Ajax Ajax(Asynchronous JavaScript and XML)表示一种创建快速动态网页的技术,可以在不重新加载整个页面的情况下更新部分内容。通过Ajax,可以在网页中使用JavaScript实现异步数据请求和数据处理,从而提高用户体验效果。 原生JavaScript实现Ajax请…

    JavaScript 2023年6月11日
    00
  • javascript smipleChart 简单图标类

    OK,下面是“javascript simpleChart 简单图表类”的详细攻略: 1. 简介 simpleChart 是基于原生的 JavaScript 开发的一个简单易用的图表库,用于在网页中绘制常见的统计图表,如折线图、柱形图、饼图等。它的优点是使用灵活、兼容性好、易于扩展,适合用于数据可视化方面的开发。 2. 如何使用 2.1 引入文件 使用 si…

    JavaScript 2023年6月10日
    00
  • JavaScript面向对象编程

    我们来详细讲解一下“JavaScript面向对象编程”的完整攻略。 什么是JavaScript面向对象编程 Javascript 是一种面向对象的编程语言,也就是说,Javascript 具有类、对象、继承等面向对象的特性。面向对象的编程风格可以帮助我们更好地组织和管理代码,使其具有可复用性、可维护性和可扩展性。 在Javascript中,对象是一个集合,它…

    JavaScript 2023年5月17日
    00
  • 时间戳转换为时间 年月日时间的JS函数

    时间戳是一种在计算机中通用的时间表示方式。它表示的是一个自1970年1月1日0时0分0秒以来经过的毫秒数。在JavaScript中,时间戳以整数的形式存在,我们可以通过一些函数将其转换成人类易读的日期时间格式。 以下是一个将时间戳转换为具有年月日时间格式的JavaScript函数的完整攻略: 步骤1:获取时间戳 首先,我们需要在JavaScript中获取一些…

    JavaScript 2023年5月27日
    00
  • javascript学习笔记(八)正则表达式

    JavaScript学习笔记(八)正则表达式 什么是正则表达式? 正则表达式是一种高级的文本匹配工具,它允许您通过定制化的模式来识别文本中的特定字符和模式。使用正则表达式可以快速,简单地从大量的文本或数据中提取信息,这是数据分析、数据挖掘等领域中必备的技能。 正则表达式语法 正则表达式是由文本字符和特殊字符构成的文本模式。下面是一些基本的正则表达式语法: ^…

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