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日

相关文章

  • js替代copy(示例代码)

    JS替代Copy是指使用JavaScript实现复制文本到剪贴板的功能,从而替代传统的复制操作。以下是实现此功能的完整攻略: 1. 导入Clipboard API JavaScript提供了Clipboard API,可以用来读写剪贴板内容。要使用它,需要在代码中导入该API。示例代码如下: import ClipboardJS from ‘clipboar…

    JavaScript 2023年6月11日
    00
  • document节点对象的获取方式示例介绍

    下面是对“document节点对象的获取方式示例介绍”的完整攻略: 获取document节点对象的方式 在JavaScript中,我们可以使用以下方法获取document节点对象: 通过document全局变量获取 当我们在文档中编写JavaScript时,document对象已经存在。通过全局变量document可以直接获取到当前文档的document节点…

    JavaScript 2023年6月10日
    00
  • 浅谈js的html元素的父节点,子节点

    当我们在编写 JavaScript 代码时,我们经常需要对 HTML 页面中的元素进行操作,而理解 HTML 元素的父节点和子节点是非常重要的。在本文中,我们将深入讨论这个话题并为您提供完整攻略。 HTML 元素的父节点和子节点 在 HTML 中,父节点表示该节点的上一级节点,而子节点是该节点的下一级节点。例如,如果我们有一个 div 元素,它包含一个 p …

    JavaScript 2023年6月10日
    00
  • JS运动特效之完美运动框架实例分析

    下面是详细讲解完美运动框架实例分析的攻略: JS运动特效之完美运动框架实例分析 一、简介 完美运动框架是一款优秀的JS运动特效库,可以实现多种运动效果,如匀速运动、缓冲运动等等。本篇文章将从实例分析的角度出发,介绍完美运动框架的常规用法以及一些细节问题。 二、常规用法 1. 引入完美运动框架 完美运动框架是一个单独的JS文件,需要在HTML文件中引入才能使用…

    JavaScript 2023年6月11日
    00
  • JS面向对象编程之对象使用分析

    关于JS面向对象编程之对象使用分析,我为您提供如下完整攻略: 什么是对象 首先,我们需要了解对象的概念和基本特征。对象是一种复合数据类型,它将各种数据结构封装在一起,表示某一个东西。对象的每个属性都有一个键(或者说叫属性名)和值,键可以是字符串或者符号,值可以是任意数据类型,包括基本数据类型、对象、函数等。对象可以通过字面量、构造函数和对象实例三种方式创建。…

    JavaScript 2023年5月27日
    00
  • JavaScript地理位置信息API

    JavaScript地理位置信息API可以让你的网站或应用程序访问用户的地理位置。本攻略将介绍如何使用JavaScript地理位置信息API获取用户的地理位置,并展示两个基于API实现的示例。 地理位置信息API介绍 Geolocation接口提供了方法来获取设备的地理位置信息。当用户请求此操作时,Geolocation会尝试确定用户的地理位置并返回该信息给…

    JavaScript 2023年6月11日
    00
  • js对象实现数据分页效果

    实现数据分页效果,可以使用 JavaScript 中的对象技术。具体而言,可以将需要分页的数据存储在一个 JavaScript 对象中,并根据用户的分页请求,从对象中提取出需要的数据子集以供展示。 以下是实现对象数据分页效果的完整攻略: 1. 创建数据对象 创建一个 JavaScript 对象来存储需要分页的数据。对象中应该包含两个属性:data 和 pag…

    JavaScript 2023年6月10日
    00
  • UTF-8编码

    UTF-8是一种对Unicode进行可变长度编码的字符编码方案。下面是UTF-8编码的详细攻略: 什么是UTF-8编码? UTF-8编码是一种通用的字符编码方案,它可以表示Unicode标准中的任何字符,包括了世界上几乎所有的字符。 UTF-8编码原理 UTF-8使用一至四个字节来表示一个字符,根据字符的不同可能会采用不同长度的字节表示。 对于单字节字符,U…

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