前端JavaScript篇之找出数组中重复的数字、js中数组是如何在内存中存储的?原生遍历数组的方式有哪些?请对以下数组,根据 `born` 的值降序排列

目录

    • 找出数组中重复的数字
      • 方法一:使用 Set 数据结构
      • 方法二:排序数组
    • js中数组是如何在内存中存储的?
    • 原生遍历数组的方式有哪些?
    • 请对以下数组,根据 `born` 的值降序排列


找出数组中重复的数字

找出数组中的重复数字是一个常见的问题,下面提供两种不同的解决思路:

方法一:使用 Set 数据结构

function findDuplicate(nums) {const numSet = new Set()for (const num of nums) {if (numSet.has(num)) {return num // 返回重复的数字}numSet.add(num)}return null // 数组中没有重复数字
}const numbers = [2, 3, 1, 0, 2, 5, 3]
const duplicate = findDuplicate(numbers)
console.log(duplicate) // 输出 2

请添加图片描述

思路: 使用 Set 数据结构,遍历数组元素,将每个元素添加到 Set 中。如果当前元素已经在 Set 中存在,说明是重复数字,直接返回。这种方法具有良好的性能,并且可以适用于未排序数组。

方法二:排序数组

function findDuplicate(nums) {nums.sort((a, b) => a - b)for (let i = 1; i < nums.length; i++) {if (nums[i] === nums[i - 1]) {return nums[i] // 返回重复的数字}}return null // 数组中没有重复数字
}const numbers = [2, 3, 1, 0, 2, 5, 3]
const duplicate = findDuplicate(numbers)
console.log(duplicate) // 输出 2

思路: 将数组排序,然后遍历数组查找相邻元素是否相同。如果找到相同的元素,直接返回。这种方法简单直观,但改变了原始数组的顺序。

你可以根据需求选择合适的方法。这两种方法在不同情境下都能有效地找出数组中的重复数字。

js中数组是如何在内存中存储的?

在JavaScript中,数组的内存存储是通过对象来实现的。通俗地说,JavaScript中的数组实际上是一种特殊类型的对象。下面是详细的说明、效果和思路:

说明:
在JavaScript中,数组是一种特殊的对象,其元素通过索引进行访问。与普通对象不同的是,数组有一些额外的功能,比如length属性,以及一些内置的数组方法(如pushpopshiftunshift等)。

效果:

// 创建一个数组
const myArray = [10, 20, 30, 40]// 访问数组元素
console.log(myArray[0]) // 输出: 10// 使用数组方法
myArray.push(50) // 在数组末尾添加元素console.log(myArray) // 输出: [10, 20, 30, 40, 50]

请添加图片描述

思路:

  1. 索引访问: 数组元素通过索引进行访问,每个元素在内存中有一个与其对应的索引。
  2. length属性: 数组对象有一个length属性,表示数组的长度。当你添加或删除元素时,length会自动更新。
  3. 额外的功能: 数组对象还具有一些额外的功能,如push用于在数组末尾添加元素,pop用于删除并返回数组的最后一个元素等。

总体而言,JavaScript中的数组是一种灵活而动态的数据结构,其内存存储采用对象的形式,通过索引进行元素的访问。

原生遍历数组的方式有哪些?

遍历数组的方式有多种,下面是一些参考:

  1. for循环:
    说明: 使用for关键字进行循环,通过索引遍历数组。
    效果:
let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {console.log(arr[i])
}

思路: 通过控制循环变量i的值,访问数组中的每个元素。

  1. for循环优化:
    说明:for循环中,通过将数组的长度缓存到一个变量,可以提高性能。
    效果:
for (let i = 0, len = arr.length; i < len; i++) {console.log(arr[i])
}

思路: 将数组的长度缓存,避免在每次循环时都计算数组的长度。

  1. forEach方法:
    说明: 使用数组的forEach方法,接受一个回调函数,对数组中的每个元素进行操作。
    效果:
arr.forEach(item => {console.log(item)
});

思路: 通过传入的回调函数,对数组中的每个元素进行操作。

  1. for…in循环:
    说明: 使用for...in语法,循环遍历对象的键。
    效果:
for (let key in arr) {console.log(arr[key])
}

思路: 遍历对象的键,不建议用于遍历数组,因为性能相对较低。

  1. for…of循环:
    说明: 使用for...of语法,用于遍历可迭代对象(例如数组、字符串等)的值。
    效果:
for (let value of arr) {console.log(value)
}

思路: 直接遍历数组中的值,性能较好,推荐用于遍历数组。

在以上示例中,手动测试的结果也印证了数组遍历的性能,其中for循环是性能最好的方式,而for...in相对较慢,不建议用于遍历数组。推荐使用for循环或for...of循环来遍历数组,具体选择取决于需求和性能要求。

请对以下数组,根据 born 的值降序排列

假设有一个包含对象的数组,每个对象都有一个 born 属性表示出生年份,现在需要根据这个属性的值降序排列数组。下面是一个通俗易懂的说明、效果和思路:

// 原始数组
const people = [{ name: 'Alice', born: 1980 },{ name: 'Bob', born: 1975 },{ name: 'Charlie', born: 1990 },{ name: 'David', born: 1985 }
]// 根据 born 属性降序排列
people.sort((a, b) => b.born - a.born)// 排序后的数组
console.log(people)

请添加图片描述

说明: sort 方法是 JavaScript 数组的内置方法,用于对数组元素进行排序。接受一个比较函数作为参数,该函数定义了排序的规则。

思路: 在比较函数中,通过 b.born - a.born 实现降序排列。如果结果为正数,则 b 在前;如果结果为负数,则 a 在前;如果结果为零,则它们相等,顺序不变。

效果: 排序后的数组将根据 born 属性的值降序排列,即从出生年份较晚的人到较早的人。在上述示例中,排序后的数组将按照出生年份降序排列。

根据具体情况和需求,你可以使用这种方法对包含对象的数组进行降序排列。

持续学习总结记录中,回顾一下上面的内容:
找出数组中重复的数字、js中数组是如何在内存中存储的?原生遍历数组的方式有哪些?请对以下数组,根据 born 的值降序排列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案

文章目录 前言 1 方案概述 2 方案实施 2.1 云平台选择 2.2 Python环境搭建 2.3 应用开发与部署 2.4 应用管理 2.5 安全性与隐私保护 3 方案优势与效益 4 推荐图书 5 粉丝福利 前言 随着云计算技术的快速发展&#xff0c;越来越多的企业开始将业务迁移至云端&#x…

云原生离线工作流编排利器 -- 分布式工作流 Argo 集群

作者&#xff1a;庄宇 在现代的软件开发和数据处理领域&#xff0c;批处理作业&#xff08;Batch&#xff09;扮演着重要的角色。它们通常用于数据处理&#xff0c;仿真计算&#xff0c;科学计算等领域&#xff0c;往往需要大规模的计算资源。随着云计算的兴起&#xff0c;阿里…

鸿蒙开发入门

下载和安装DevEco Studio&#xff1a; 文档中心https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/software_install-0000001053582415-V3 配置鸿蒙开发环境&#xff1a; 文档中心https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3…

MySQL之数据库DDL

文章目录 MySQL数据库基本操作数据定义DDL对数据库的常用操作创建表修改表格式结构 MySQL数据库基本操作 首先我们先了解SQL的语言组成&#xff0c;他分为四个部分 数据定义语言&#xff08;DDL&#xff09;数据操纵语言&#xff08;DML&#xff09;数据控制语言&#xff08;…

亚马逊、eBay、TikTok等平台的综合运营实用工具分享!

亚马逊、eBay等电商平台为卖家提供了广阔的销售机会&#xff0c;但同时也带来了运营管理的挑战。为了提高运营效率和销售业绩&#xff0c;卖家需要借助一些实用工具。本文将介绍一些在亚马逊、eBay等平台上综合运营中非常有用的工具&#xff0c;帮助卖家更高效地管理店铺&#…

CC工具箱使用指南:【处理面要素空洞】

一、简介 面要素在经过一系列的处理后&#xff0c;可能会存在空洞。 有些小空洞面积过小&#xff0c;人工检查很容易遗漏&#xff0c;于是就做了这个工具。 目的就是获取面要素的空洞&#xff0c;或者去除空洞获取要素的边界。 二、工具参数介绍 右键点击面要素图层&#xf…

spring mvc 请求与响应

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

神经网络的学习(Neural Networks: Learning)

1.代价函数 案例&#xff1a;假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;表示神经网络层数&#xff0c;&#x1d446;&#x1d43c;表示每层的 neuron 个数(&#x1d446;&#…

k8s 容器 java 应用内存限制不生效

一 k8s java 应用内存限制不生效 回顾&#xff1a;Linux杂谈之java命令 namespace负责资源隔离 cgroups负责资源限制 容器JVM最佳实践 Metaspace 是 非 Heap 内存 管理空间,那么 Heap 就是操作空间 JVM内存模型简介 隔离&#xff1a; 两个进程完全隔离感知&#xff1…

VM虚拟机忘记密码,ISO镜像修改

VM虚拟机忘记密码&#xff0c;ISO镜像修改 制作镜像&#xff1a; 镜像已制作&#xff0c;可在文末链接自行获取从镜像启动系统 1&#xff09;添加IOS镜像文件&#xff1a; 2&#xff09;开机进去固件&#xff1a; 进入后选择对应的驱动器启动 3. 修改密码 点击修改密码软件&a…

【极数系列】Flink环境搭建(02)

【极数系列】Flink环境搭建&#xff08;02&#xff09; 引言 1.linux 直接在linux上使用jdk11flink1.18.0版本部署 2.docker 使用容器部署比较方便&#xff0c;一键启动停止&#xff0c;方便参数调整 3.windows 搭建Flink 1.18.0版本需要使用Cygwin或wsl工具模拟unix环境…

每日一题——LeetCode1309.解码字母到整数映射

方法一 个人方法&#xff1a; 由题意可得&#xff1a; 1、1-26对应a-z&#xff0c;只不过从10开始&#xff0c;后面要加#才能表示字母 2、10# - 26# 都是三位数&#xff0c;开头<2&#xff0c;结尾都为# 3、某个数后面两位如果不为#那么该数为1-9对应a-i&#xff0c;如果…

华为设备配置简单流分类

实验需求&#xff1a;10.1.1.0/24网段的PC访问PC3&#xff0c;流量进入AR1时&#xff0c;DSCP字段优先级为0&#xff0c;在AR1进行配置&#xff0c;将10.1.1.0/24网段流量的优先级映射为内部优先级46。 实验步骤&#xff1a; 步骤1&#xff1a;配置IP地址 [AR1]interface g0/…

Pygame之纯Python实现你好2024效果

Pygame之纯Python实现你好2024效果 前言&#xff1a; 对于某些指JavaScript与前端实现为Python实现你好2024效果的营销号实在看不下去了。无底线营销&#xff0c;还要私信拿源码&#xff0c;hhh 于是就有了以下代码&#xff1a; 运行前安装pygame pip install pygame运行效果…

k8s-基础知识(Service,NodePort,CusterIP,NameSpace,资源限制)

Node Node 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象&#xff0c;Annotations 则是用来记录一些附加信息&#xff0c;用来辅助应…

HTML 入门手册(一)

目录 HTML介绍 1-基础语法 单标签 双标签 整体结构 2-标题和水平线 标题 水平线 3-段落和换行 段落 换行 4-列表 无序列表 有序列表 嵌套列表 5-div和span div span 6-格式化标签 粗体 斜体 下划线中划线 上标和下标 7-超链接(a标签) 链接到URL 链接…

GitHub无法完成推送 的设置选项

GitHub无法完成推送 的设置选项 系统设置 VS中控制台设置【指令】 控制台调出方法 以下为VS控制台指令 git config --global --unset http.proxy git config --global --unset https.proxygit config --global http.proxy 127.0.0.1:7890 git config --global https.proxy …

docker - compose 部署 Tomcat

目录 下面用 docker-compose 方法部署 Tomcat 1、准备工作 2、部署容器 启动容器 查看新启动的容器 3、总结 下面用 docker-compose 方法部署 Tomcat 1、准备工作 先在主机创建工作文件夹&#xff0c;为了放置 Tomcat 的配置文件等。创建文件夹的方法&#xff0c;自己搞…

【操作系统】实验三 编译 Linux 内核

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

基于springboot+vue的在线商城系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…