第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

news2024/12/13 3:49:40

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

在 JavaScript 中,数组和对象是两种非常重要的数据结构,它们用于存储和组织数据。尽管它们都属于引用类型(即它们存储的是对数据的引用而不是数据本身),但它们有着不同的特性和用途。

创建和访问数组

当然,下面是四个关于如何在 JavaScript 中创建和访问数组的示例。这些示例涵盖了不同的创建方法以及访问数组元素的方式。

示例 1: 使用数组字面量创建并访问数组

这是最简单且常用的方法来创建一个数组,并通过索引访问其元素。

// 创建一个包含水果名称的数组
const fruits = ['apple', 'banana', 'orange'];

// 访问数组中的第一个元素
console.log(fruits[0]); // 输出: apple

// 修改数组中的第二个元素
fruits[1] = 'grape';

// 打印整个数组
console.log(fruits); // 输出: ["apple", "grape", "orange"]

在这里插入图片描述

示例 2: 使用 Array 构造函数创建数组

你可以使用 Array 构造函数来创建数组。注意,如果只传递一个数字参数给构造函数,则会创建一个具有指定长度但未初始化的数组。

// 创建一个包含数字的数组
const numbers = new Array(1, 2, 3, 4, 5);

// 访问数组中的最后一个元素
console.log(numbers[numbers.length - 1]); // 输出: 5

// 添加新元素到数组末尾
numbers.push(6);

// 打印整个数组
console.log(numbers); // 输出: [1, 2, 3, 4, 5, 6]

在这里插入图片描述

示例 3: 使用数组方法创建和访问多维数组

有时你需要创建一个多维数组(即数组中的每个元素本身也是一个数组),这可以通过嵌套数组来实现。

// 创建一个多维数组
const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

// 访问二维数组中的特定元素
console.log(matrix[1][1]); // 输出: 5 (第二行第二列)

// 修改二维数组中的元素
matrix[0][2] = 'X';

// 打印修改后的整个数组
console.log(matrix); // 输出: [[1, 2, "X"], [4, 5, 6], [7, 8, 9]]

在这里插入图片描述

示例 4: 使用数组填充方法创建并访问大数组

JavaScript 提供了一些便捷的方法来创建大型或特定模式的数组,例如 Array.from()fill() 方法。

// 使用 Array.from() 创建一个从 1 到 5 的数组
const sequence = Array.from({ length: 5 }, (_, i) => i + 1);

// 访问数组中的所有元素
console.log(sequence); // 输出: [1, 2, 3, 4, 5]

// 使用 fill() 方法创建一个填充相同值的数组
const filledArray = new Array(3).fill('same');

// 访问数组中的所有元素
console.log(filledArray); // 输出: ["same", "same", "same"]

// 使用 map() 方法创建一个基于现有数组的新数组
const doubled = sequence.map(x => x * 2);

// 打印新的数组
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

在这里插入图片描述

总结
  • 示例 1 展示了如何使用数组字面量创建数组,并通过索引访问和修改元素。
  • 示例 2 演示了 Array 构造函数的用法,包括添加新元素。
  • 示例 3 展现了多维数组的创建和访问方式。
  • 示例 4 介绍了几种创建和操作大型或模式化数组的方法,如 Array.from()fill()

这些示例覆盖了 JavaScript 数组的基本创建和访问技巧,帮助你更好地理解和应用这一重要的数据结构。

数组方法概览

JavaScript 提供了丰富的数组方法,使得操作数组变得非常方便。以下是四个常见的数组方法及其使用示例,涵盖了一些最常用的功能,如遍历、查找、过滤和转换数组元素。

示例 1: 使用 forEach 遍历数组

forEach 方法用于对数组中的每个元素执行一次提供的函数,但不返回任何值(即返回 undefined)。

const numbers = [1, 2, 3, 4, 5];

// 使用 forEach 遍历数组并打印每个元素
numbers.forEach((number) => {
    console.log(number);
});

// 输出:
// 1
// 2
// 3
// 4
// 5

在这里插入图片描述

示例 2: 使用 map 创建新数组

map 方法创建一个新数组,其结果是对调用数组中的每个元素调用提供的函数后的返回值。

const numbers = [1, 2, 3, 4, 5];

// 使用 map 将每个元素乘以 2,并创建一个新的数组
const doubled = numbers.map((number) => number * 2);

console.log(doubled); // 输出: [2, 4, 6, 8, 10]

在这里插入图片描述

示例 3: 使用 filter 筛选数组元素

filter 方法创建一个新数组,包含所有通过测试的元素。原数组不会被改变。

const numbers = [1, 2, 3, 4, 5, 6];

// 使用 filter 找出所有偶数
const evens = numbers.filter((number) => number % 2 === 0);

console.log(evens); // 输出: [2, 4, 6]

在这里插入图片描述

示例 4: 使用 reduce 计算数组的总和或聚合数据

reduce 方法对数组中的每个元素(从左到右)执行一个提供的 reducer 函数,将其结果汇总为单个输出值。

const numbers = [1, 2, 3, 4, 5];

// 使用 reduce 计算数组中所有元素的总和
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

console.log(sum); // 输出: 15

// 使用 reduce 计算对象数组中特定属性的总和
const orders = [
    { id: 1, amount: 200 },
    { id: 2, amount: 450 },
    { id: 3, amount: 300 }
];

const totalAmount = orders.reduce((sum, order) => sum + order.amount, 0);

console.log(totalAmount); // 输出: 950

在这里插入图片描述

总结
  • forEach:遍历数组,对每个元素执行指定的操作,但不返回新数组。
  • map:创建一个新数组,其中包含对原始数组中每个元素应用函数后的结果。
  • filter:创建一个新数组,包含所有满足给定条件的元素。
  • reduce:将数组中的元素累积成一个单一的值,常用于求和或聚合操作。

这些方法是处理数组时最常用的工具之一,它们不仅简化了代码,还提高了可读性和效率。通过组合使用这些方法,你可以更灵活地操作和处理数组数据。

对象的创建与属性访问

在 JavaScript 中,对象是存储键值对(即属性和方法)的数据结构。它们是非常灵活且强大的工具,用于组织和操作数据。下面是四个关于如何创建对象以及访问其属性的示例。

示例 1: 使用对象字面量创建对象并访问属性

这是最简单的方法来创建一个对象,并通过点符号或方括号语法访问其属性。

// 创建一个表示人的对象
const person = {
    firstName: 'John',
    lastName: 'Doe',
    age: 30,
    getFullName: function() {
        return `${this.firstName} ${this.lastName}`;
    }
};

// 访问对象属性
console.log(person.firstName); // 输出: John
console.log(person['lastName']); // 输出: Doe

// 调用对象方法
console.log(person.getFullName()); // 输出: John Doe

在这里插入图片描述

示例 2: 使用构造函数创建对象实例

你可以定义一个构造函数,然后使用 new 关键字来创建该构造函数的多个实例。

// 定义一个构造函数
function Person(firstName, lastName, age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.getFullName = function() {
        return `${this.firstName} ${this.lastName}`;
    };
}

// 创建构造函数的实例
const john = new Person('John', 'Doe', 30);
const jane = new Person('Jane', 'Smith', 25);

// 访问实例属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

示例 3: 使用 class 语法创建对象

ES6 引入了类(class)语法,它提供了一种更简洁的方式来定义构造函数和方法。

// 定义一个类
class Person {
    constructor(firstName, lastName, age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    getFullName() {
        return `${this.firstName} ${this.lastName}`;
    }
}

// 创建类的实例
const john = new Person('John', 'Doe', 30);
const jane = new Person('Jane', 'Smith', 25);

// 访问实例属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

示例 4: 使用 Object.create 方法创建对象

Object.create 方法允许你基于现有的对象创建新对象,并指定原型对象。这对于实现继承非常有用。

// 创建一个原型对象
const personPrototype = {
    getFullName: function() {
        return `${this.firstName} ${this.lastName}`;
    }
};

// 使用 Object.create 基于原型对象创建新对象
const john = Object.create(personPrototype);
john.firstName = 'John';
john.lastName = 'Doe';
john.age = 30;

const jane = Object.create(personPrototype);
jane.firstName = 'Jane';
jane.lastName = 'Smith';
jane.age = 25;

// 访问对象属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

总结
  • 对象字面量:最简单的方式创建对象,适合单个对象的快速定义。
  • 构造函数:适合需要创建多个相似对象的情况,提供了初始化参数。
  • class 语法:ES6 提供的更简洁、面向对象的语法,便于定义构造函数和方法。
  • Object.create:基于现有对象创建新对象,有助于实现原型链继承。

这些方法展示了不同情况下创建和操作 JavaScript 对象的方式,每种方法都有其适用场景和优点。根据具体需求选择合适的方法,可以使代码更加清晰和高效。

遍历对象

JavaScript 遍历对象的三种常见方法

遍历对象是指访问对象的所有属性(键值对)。JavaScript 提供了多种方式来实现这一点,下面将介绍三种常见的方法,并附带示例代码。

示例 1: 使用 for...in 循环遍历对象属性

for...in 循环可以遍历对象的所有可枚举属性,包括继承的属性。如果你只想遍历对象自身的属性,应该使用 hasOwnProperty() 方法进行过滤。

const person = {
    firstName: 'John',
    lastName: 'Doe',
    age: 30,
    occupation: 'Developer'
};

// 使用 for...in 遍历对象属性
for (let key in person) {
    if (person.hasOwnProperty(key)) { // 确保只遍历自身属性
        console.log(`${key}: ${person[key]}`);
    }
}

// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

示例 2: 使用 Object.keys()forEach 遍历对象键

Object.keys() 方法返回一个包含对象所有自身属性键的数组,然后你可以使用数组的方法如 forEach 来遍历这些键。

const person = {
    firstName: 'John',
    lastName: 'Doe',
    age: 30,
    occupation: 'Developer'
};

// 使用 Object.keys() 和 forEach 遍历对象键
Object.keys(person).forEach(key => {
    console.log(`${key}: ${person[key]}`);
});

// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

示例 3: 使用 Object.entries() 和解构赋值遍历键值对

Object.entries() 方法返回一个给定对象自身所有 [key, value] 对的数组迭代器。结合 for...offorEach 可以方便地同时获取键和值。

const person = {
    firstName: 'John',
    lastName: 'Doe',
    age: 30,
    occupation: 'Developer'
};

// 使用 Object.entries() 和解构赋值遍历键值对
for (let [key, value] of Object.entries(person)) {
    console.log(`${key}: ${value}`);
}

// 或者使用 forEach
Object.entries(person).forEach(([key, value]) => {
    console.log(`${key}: ${value}`);
});

// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

总结
  • for...in:适合遍历对象的所有可枚举属性,但需要注意区分自身属性和继承属性。
  • Object.keys() + 数组方法:通过将对象键转换为数组,利用数组的遍历方法,清晰且易于操作。
  • Object.entries():提供了一种简洁的方式来同时获取键和值,特别适用于需要同时处理键和值的场景。

选择哪种方法取决于具体的需求和偏好。上述三种方法都是有效且常用的遍历对象的方式,可以帮助你根据实际情况选择最适合的一种。

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

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

相关文章

面试中遇到的一些有关进程的问题(有争议版)

一个进程最多可以创建多少个线程? 这个面经很有问题,没有说明是什么操作系统,以及是多少位操作系统。 因为不同的操作系统和不同位数的操作系统,虚拟内存可能是不一样多。 Windows 系统我不了解,我就说说 Linux 系统…

Excel技巧:如何批量调整excel表格中的图片?

插入到excel表格中的图片大小不一,如何做到每张图片都完美的与单元格大小相同?并且能够根据单元格来改变大小?今天分享,excel表格里的图片如何批量调整大小。 方法如下: 点击表格中的一个图片,然后按住Ct…

Stable Audio Open模型部署教程:用AI打造独家节拍,让声音焕发新活力!

Stable Audio Open 是一个开源的文本到音频模型,允许用户从简单的文本提示中生成长达 47 秒的高质量音频数据。该模型非常适合创建鼓点、乐器即兴演奏、环境声音、拟音录音和其他用于音乐制作和声音设计的音频样本。用户还可以根据他们的自定义音频数据微调模型&…

Linux上传代码的步骤与注意事项

最近因为工作需要,要上传代码到 DPDK 上,代码已经上传成功,记录一下过程,给大家提供一个参考。我这次需要上传的是pmd,即poll mode driver。 1 Coding Style 要上传代码,第一件事就是需要知道Coding Styl…

运费微服务和redis存热点数据

目录 运费模板微服务 接收前端发送的模板实体类 插入数据时使用的entity类对象 BaseEntity类 查询运费模板服务 新增和修改运费模块 整体流程 代码实现 运费计算 整体流程 总的代码 查找运费模板方法 计算重量方法 Redis存入热点数据 1.从nacos导入共享redis配置…

如何在windows10上部署WebDAV服务并通过内网穿透实现公网分享内部公共文件

WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的应用层网络协议,它允许用户通过互联网进行文件的编辑和管理。这意味着,无论员工身处何地,只要连接到互联网,就能访问、编辑和…

gRPC 快速入门 — SpringBoot 实现(1)

目录 一、什么是 RPC 框架 ? 二、什么是 gRPC 框架 ? 三、传统 RPC 与 gRPC 对比 四、gRPC 的优势和适用场景 五、gRPC 在分布式系统中应用场景 六、什么是 Protocol Buffers(ProtoBuf)? 特点 使用场景 简单的…

深入浅出:SOME/IP-SD的工作原理与应用

目录 往期推荐 相关缩略语 SOME/IP 协议概述 协议介绍 SOME/IP TP 模块概述和 BSW 模块依赖性 原始 SOME/IP 消息的Header格式 SOME/IP-SD 模块概述 模块介绍 BSW modules依赖 客户端-服务器通信示例 Message 结构 用于SD服务的BSWM状态处理 往期推荐 ETAS工具…

字节高频算法面试题:小于 n 的最大数

问题描述(感觉n的位数需要大于等于2,因为n的位数1的话会有点问题,“且无重复”是指nums中存在重复,但是最后返回的小于n最大数是可以重复使用nums中的元素的): 思路: 先对nums倒序排序 暴力回…

相机动态/在线标定

图1 图2 基本原理 【原理1】平行线在射影变换后会交于一点。如图所示,A为相机光心,蓝色矩形框为归一化平面,O为平面中心。地面四条黄色直线为平行且等距的车道线。HI交其中两条车道线于H、I, 过G作HI的平行线GM交车道线于M。HI、GM在归一化平面上的投影分别为JK、PN,二者会…

在 Windows 11 WSL (Ubuntu 24.04.1 LTS) | Python 3.12.x 下部署密码学库 charm

1. 在 Windows 11 上部署 Ubuntu (WSL) 由于作者没有高性能的 Ubuntu 服务器或个人电脑,且公司或学校提供的 Ubuntu 服务器虽然提供高性能 GPU 等硬件配置但通常不会提供 root 权限,因而作者通过在搭载了 Windows 11 的个人电脑上启动 Ubuntu (WSL) 来进…

【中间件开发】Redis基础命令详解及概念介绍

文章目录 前言一、Redis相关命令详解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式锁的实现1.3 lua脚本解决ACID原子性1.4 Redis事务的ACID性质分析 二、Redis协议与异步方式2.1 Redis协议解析2.1.1 redis pipeline…

设计模式的艺术读书笔记

设计模式的艺术 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建的艺术创建型模式单例模式饿汉式单例与懒汉式单例的讨论通过静态内部类实现的更好办法 简单工厂模式工厂方法模式重载的工厂方法工厂方法的隐藏工厂方…

计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

Mac 录制电脑系统内的声音的具体方法?

1.第一步:下载BlackHole 软件 方式1:BlackHole官方下载地址 方式2: 百度云下载 提取码: n5dp 2.第二步:安装BlackHole 双击下载好的BlackHole安装包,安装默认提示安装。 3.第三步:在应用程序中找到音频…

【开源免费】基于Vue和SpringBoot的课程答疑系统(附论文)

博主说明:本文项目编号 T 070 ,文末自助获取源码 \color{red}{T070,文末自助获取源码} T070,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

ACM latex模板中的CCSXML (即:CCS Concept)怎么填?

CCS Concept 感谢CCS Concept 怎么填 的珠玉在前. 问题描述 如下,ACM模板(比如ACM computing surveys)有一段是需要填写 ccsxml: %% %% The code below is generated by the tool at [http://dl.acm.org/ccs.cfm.](http://dl.…

【Transformer序列预测】Pytorch中构建Transformer对序列进行预测源代码

Python,Pytorch中构建Transformer进行序列预测源程序。包含所有的源代码和数据,程序能够一键运行。此程序是完整的Transformer,即使用了Encoder、Decoder和Embedding所有模块。源程序是用jupyterLab所写,建议分块运行。也整理了.p…

Mybatis-plus 简单使用,mybatis-plus 分页模糊查询报500 的错

一、mybtis-plus配置下载 MyBatis-Plus 是一个 Mybatis 增强版工具&#xff0c;在 MyBatis 上扩充了其他功能没有改变其基本功能&#xff0c;为了简化开发提交效率而存在。 具体的介绍请参见官方文档。 官网文档地址&#xff1a;mybatis-plus 添加mybatis-plus依赖 <depe…

前端项目使用gitlab-cicd+docker实现自动化部署

GitLab CI/CD 是一个强大的工具&#xff0c;可以实现项目的自动化部署流程&#xff0c;从代码提交到部署只需几个步骤。本文将带你配置 GitLab CI/CD 完成一个前端项目的自动化部署。 前言 为什么使用cicddocker&#xff1f; 目前我们公司开发环境使用的shell脚本部署&#…