[JavaScript] 数组与对象详解


文章目录

  • 数组(Array)
    • 什么是数组
    • 数组的常用操作
        • **访问数组元素**
        • **修改数组元素**
        • **数组的长度**
        • **添加和删除元素**
    • 常用数组方法
        • `map()`:
        • `filter()`:
        • `reduce()`:
        • **其他实用方法**
  • 对象(Object)
    • 什么是对象
    • 对象的基本操作
        • **访问属性**
        • **添加或修改属性**
        • **删除属性**
        • **检查属性是否存在**
    • 遍历对象
  • 数组与对象在实际开发中的应用
    • 操作用户数据(数组和对象结合)
    • 计数操作
  • 与其他语言(如C++)的区别

数组和对象是 JavaScript 中的核心数据结构,频繁应用于日常开发中。为了让知识点更详细,并强调实用性,我将按以下顺序进行讲解:数组和对象的 基础操作常用方法高级技巧,以及在实际开发中的 典型应用场景


数组(Array)

什么是数组

数组是一个有序的元素集合,可以存储多种数据类型(数字、字符串、对象等)。

创建数组的方式

// 方式1:字面量
const arr1 = [1, 2, 3, 4];

// 方式2:使用Array构造函数
const arr2 = new Array(5); // 创建一个长度为5的空数组
const arr3 = new Array(1, 2, 3); // 创建包含具体元素的数组

数组的常用操作

访问数组元素

通过索引访问元素(从 0 开始计数)。

const arr = [10, 20, 30];
console.log(arr[0]); // 输出 10
修改数组元素
arr[1] = 25; // 修改索引为 1 的元素
console.log(arr); // 输出 [10, 25, 30]
数组的长度

length 属性表示数组的长度。

const arr = [1, 2, 3];
console.log(arr.length); // 输出 3
添加和删除元素
  • push:向数组末尾添加元素。
  • pop:移除数组末尾的元素。
  • unshift:在数组开头添加元素。
  • shift:移除数组开头的元素。
const arr = [1, 2, 3];
arr.push(4);        // [1, 2, 3, 4]
arr.pop();          // [1, 2, 3]
arr.unshift(0);     // [0, 1, 2, 3]
arr.shift();        // [1, 2, 3]

常用数组方法

map():

用于对数组中的每个元素执行指定的操作,并返回一个新数组。

示例

const arr = [1, 2, 3];
const doubled = arr.map(x => x * 2);
console.log(doubled); // [2, 4, 6]
filter():

用于过滤数组中的元素,根据条件返回一个新数组。

示例

const arr = [1, 2, 3, 4, 5];
const evenNumbers = arr.filter(x => x % 2 === 0);
console.log(evenNumbers); // [2, 4]
reduce():

用于对数组中的所有元素进行累积操作,返回最终结果。

示例

const arr = [1, 2, 3, 4];
const sum = arr.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 输出 10
其他实用方法
  • forEach:遍历数组,执行指定操作(但不返回新数组)。
  • find:找到第一个满足条件的元素并返回。
  • includes:检查数组是否包含某个值。

对象(Object)

什么是对象

对象是键值对的集合,每个键值对称为对象的一个 属性。键是字符串或符号,值可以是任意类型。

创建对象的方式

// 方式1:对象字面量
const obj = { name: "Kevin", age: 20 };

// 方式2:构造函数
const obj2 = new Object();
obj2.name = "Kevin";
obj2.age = 20;

对象的基本操作

访问属性

通过点(.)或方括号([])访问。

const obj = { name: "Kevin", age: 20 };
console.log(obj.name);   // Kevin
console.log(obj["age"]); // 20
添加或修改属性
obj.city = "Shanghai";   // 添加新属性
obj.age = 21;            // 修改属性值
console.log(obj);        // { name: 'Kevin', age: 21, city: 'Shanghai' }
删除属性
delete obj.city;
console.log(obj); // { name: 'Kevin', age: 21 }
检查属性是否存在

使用 in 运算符。

console.log("name" in obj);  // true
console.log("city" in obj);  // false

遍历对象

  • for...in:遍历对象所有可枚举属性。
const obj = { name: "Kevin", age: 20 };
for (let key in obj) {
    console.log(key, obj[key]);
}
// 输出:
// name Kevin
// age 20
  • Object.keys():获取对象的所有键。
  • Object.values():获取对象的所有值。
  • Object.entries():获取键值对数组。
console.log(Object.keys(obj));   // ["name", "age"]
console.log(Object.values(obj)); // ["Kevin", 20]
console.log(Object.entries(obj));// [["name", "Kevin"], ["age", 20]]

数组与对象在实际开发中的应用

操作用户数据(数组和对象结合)

const users = [
    { id: 1, name: "Alice", age: 25 },
    { id: 2, name: "Bob", age: 30 },
    { id: 3, name: "Charlie", age: 35 }
];

// 找到年龄大于30的用户
const result = users.filter(user => user.age > 30);
console.log(result); // [{ id: 3, name: "Charlie", age: 35 }]

// 提取所有用户的名字
const names = users.map(user => user.name);
console.log(names); // ["Alice", "Bob", "Charlie"]

计数操作

计算数组中元素的出现次数

const fruits = ["apple", "banana", "apple", "orange", "banana", "apple"];

const count = fruits.reduce((acc, fruit) => {
    acc[fruit] = (acc[fruit] || 0) + 1;
    return acc;
}, {});

console.log(count);
// 输出:{ apple: 3, banana: 2, orange: 1 }

与其他语言(如C++)的区别

特性JavaScriptC++
数组类型可以包含多种数据类型必须为同一数据类型
动态性数组和对象可动态增加/删除元素或属性数组长度固定,动态需使用STL
内置方法提供丰富的数组方法如 map, filter, reduceSTL 中有类似算法支持

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“模板”格式化发布新创诗(为《诗意 2 0 2 5》贡献力量)

预置MarkDown&Html文本,脚本读取f-string模板完成录入嵌套。 (笔记模板由python脚本于2025-01-22 19:19:58创建,本篇笔记适合喜欢分享的达人的coder翻阅) 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不…

论文速读|Multi-Modal Disordered Representation Learning Network for TBPS.AAAI24

论文地址:Multi-Modal Disordered Representation Learning Network for Description-Based Person Search 代码地址:未开源(2025.01.22) bib引用: inproceedings{yang2024multi,title{Multi-Modal Disordered Repres…

计算机视觉算法实战——实体物体跟踪

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​ ​ 1. 领域介绍✨✨ 实体物体跟踪(Object Tracking)是计算机视觉领域中的一个重要研究方向&#x…

C++17 新特性深入解析:constexpr 扩展、if constexpr 和 constexpr lambda

C17 不仅增强了现有特性,还引入了一些全新的编程工具,极大地提升了代码的效率和表达力。在这篇文章中,我们将深入探讨 C17 中与 constexpr 相关的三个重要特性:constexpr 的扩展用法、if constexpr 和 constexpr lambda。这些特性…

IVR:交互式语音应答系统解析及其应用

引言 IVR(Interactive Voice Response),即交互式语音应答系统,是一种功能强大的电话自动服务系统。它通过语音识别和按键反馈,使用户与系统之间实现实时交互,为用户提供自助服务、咨询、报告、投诉等多种功…

Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)

作者:来自 Elastic Zoia_AUBRY 在过去三年担任客户工程师期间,我遇到了数百名客户,他们最常问的问题之一是:“我的数据在 Elastic 中;我该如何利用它获得最大优势?”。 如果这适用于你,那么本…

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…

STM32_SD卡的SDIO通信_基础读写

本篇将使用CubeMXKeil, 创建一个SD卡读写的工程。 目录 一、SD卡要点速读 二、SDIO要点速读 三、SD卡座接线原理图 四、CubeMX新建工程 五、CubeMX 生成 SD卡的SDIO通信部分 六、Keil 编辑工程代码 七、实验效果 一、SD卡 速读 SD卡,全称Secure Digital M…

大模型GUI系列论文阅读 DAY2续:《一个具备规划、长上下文理解和程序合成能力的真实世界Web代理》

摘要 预训练的大语言模型(LLMs)近年来在自主网页自动化方面实现了更好的泛化能力和样本效率。然而,在真实世界的网站上,其性能仍然受到以下问题的影响:(1) 开放领域的复杂性,(2) 有限的上下文长度&#xff…

【ESP32】ESP32连接JY61P并通过WIFI发送给电脑

前言 手头上有个ESP32&#xff0c;发现有wifi功能&#xff0c;希望连接JY61P并通过WIFI把姿态数据发送给电脑 1.采用Arduino IDE编译器&#xff1b;需要安装ESP32的开发板管理器&#xff1b; 2.电脑接受数据是基于python的&#xff1b; 1. ESP32 连接手机WIFI #include <…

C语言程序设计十大排序—冒泡排序

文章目录 1.概念✅2.冒泡排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…

【Elasticsearch】腾讯云安装Elasticsearch

Elasticsearch 认识Elasticsearch安装Elasticsearch安装Kibana安装IK分词器分词器的作用是什么&#xff1f;IK分词器有几种模式&#xff1f;IK分词器如何拓展词条&#xff1f;如何停用词条&#xff1f; 认识Elasticsearch Elasticsearch的官方网站如下 Elasticsearch官网 Ela…

Django学习笔记(安装和环境配置)-01

Django学习笔记(安装和环境配置)-01 一、创建python环境 1、可以通过安装Anaconda来创建一个python环境 # 创建一个虚拟python环境 conda create -n django python3.8 # 切换激活到创建的环境中 activate django2、安装django # 进入虚拟环境中安装django框架 pip install …

python创建一个httpServer网页上传文件到httpServer

一、代码 1.server.py import os from http.server import SimpleHTTPRequestHandler, HTTPServer import cgi # 自定义请求处理类 class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path /:# 响应200状态码self.send_response(2…

一个软件分发和下载的网站源码,带多套模板

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP&#xff0c;带下载统计&#xff0c;带多套模板&#xff0c;带图文教程 代码下载&#xff1a;百度网盘

前端面试题-问答篇-5万字!

1. 请描述CSS中的层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;规则&#xff0c;以及它们在实际开发中的应用。 在CSS中&#xff0c;层叠&#xff08;Cascade&#xff09;和继承&#xff08;Inheritance&#xff09;是两个关键的规则&#x…

面试:Hadoop,块,HDFS的优缺点,HDFS的读写流程

Hadoop CDH会简化Hadoop的安装 Hue主要用于数据分析和处理&#xff0c;而CM(Cloudera Manager)则主要用于集群的管理和运维。 HDFS HDFS的块 块是 HDFS 系统当中的最小存储单位, 在hadoop2.0和3.0中默认128MB 在HDFS上的文件会被拆分成多个块&#xff0c;每个块作为独立的单…

Stable Diffusion 3.5 模型在 Linux 上的部署指南

文章目录 前言-参考资料如下一. ComfyUI安装二.模型下载2.1 安装GGUF和T5 xxl编码模型2.2 安装ComfyUI辅助插件2.3 启动ComfyUI2.4 基础ComfyUI和SD3.5配置2.5 demo 前言-参考资料如下 ComfyUI WIKI教程 sd3.5 github 尝试过sd集成ollama&#xff0c;但是sd在ollama上无法良好…

移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…

C语言之饭店外卖信息管理系统

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之饭店外卖信息管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验…