面试题每日一练,测测你对JavaScript WeakMap 和数组方法的理解

2024-08-28 09:12

本文主要是介绍面试题每日一练,测测你对JavaScript WeakMap 和数组方法的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

98dfdb456f2b1c1724c769030ca0b520.png

今天的挑战题目涉及到JavaScript中的 WeakMap、数组方法 mapreduce,以及对对象引用的管理。让我们一步步解析这段代码,看看它会输出什么以及为什么。

代码解析

首先,代码创建了一个 WeakMap 实例:

const weakMap = new WeakMap();

WeakMap 是一个键必须是对象的特殊类型的 Map,其中的键是弱引用,这意味着如果没有其他引用指向这些对象,垃圾回收机制可以自动回收它们。

接下来,代码使用 map 方法创建了一个包含对象的数组 arr

const arr = [1, 2, 3].map(n => ({ n }));
  • [1, 2, 3].map(n => ({ n })) 创建了一个新数组,其中每个元素都是一个对象,形如 { n: 1 }{ n: 2 }{ n: 3 }

然后,代码通过 forEach 方法将这些对象作为键添加到 WeakMap 中,并将对应的值设置为 obj.n * 2

arr.forEach(obj => weakMap.set(obj, obj.n * 2));
  • 这一步操作后,weakMap 中存储了三组键值对:{ n: 1 } => 2{ n: 2 } => 4{ n: 3 } => 6

接下来,代码从数组 arr 中移除了最后一个元素:

arr.pop(); // Remove the last element
  • 这行代码将数组 arr 的最后一个元素 { n: 3 } 移除。因为 WeakMap 中的键是弱引用,所以如果没有其他地方引用这个对象,它可能会被垃圾回收,从而也会从 WeakMap 中消失。

然后,代码使用 reduce 方法计算剩余对象在 WeakMap 中对应值的和:

const result = arr.reduce((acc, obj) => acc + weakMap.get(obj), 0);
  • reduce 方法遍历 arr 中剩下的两个对象 { n: 1 }{ n: 2 },并从 WeakMap 中获取它们的值,分别是 24,然后将它们相加。

输出结果

根据上述逻辑,最终的 result 值是 2 + 4 = 6。因此,console.log(result) 的输出是:

console.log(result); // 输出 6

结束

这道题目展示了 WeakMap 如何与数组操作结合使用。通过 WeakMap 的弱引用特性,删除数组中的对象元素会影响 WeakMap 中的键值对的存在。当最后一个元素被 pop 移除后,reduce 仅计算剩余对象在 WeakMap 中的对应值之和。理解 WeakMap 的行为以及如何与数组方法一起使用,对于正确解答这道题目至关重要。你答对了吗?欢迎在评论区分享你的答案和想法!

每天一道面试题,帮助你提高编程技能,不断进步!记得关注哦!

这篇关于面试题每日一练,测测你对JavaScript WeakMap 和数组方法的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114342

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.