JavaScript解构对象

news/2025/2/13 0:39:36/

之前介绍了数组解构,本文来介绍一下对象如何解构;

前言

现在我们有这样的一个数组:

const restaurant = {name: 'Classico Italiano',location: 'Via Angelo Tavanti 23, Firenze, Italy',categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'],starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'],mainMenu: ['Pizza', 'Pasta', 'Risotto'],order: function (starterIndex, mainIndex) {return [restaurant.starterMenu[starterIndex],restaurant.mainMenu[mainIndex],];},openingHours: {thu: {open: 12,close: 22,},fri: {open: 11,close: 23,},sat: {open: 0, // Open 24 hoursclose: 24,},},
};

基本解构

const {name,openingHours,categories} = restaurant;
console.log(name,openingHours,categories);

在这里插入图片描述

除此之外,我们也可以将解构出来的数组赋予不同的变量名称

const {name: restaurantName, openingHours: hours, categories:tags} = restaurant;
console.log(restaurantName,hours,tags);

在这里插入图片描述

赋予默认值

当我们解构对象中不存在的一个方法时,我们最好给与一个默认值,否则会变成未定义的;

const {menu = [], starterMenu: starter = [] } = restaurant;
console.log(menu,starter);

在这里插入图片描述

当不存在时候会输入你所给的默认值,当存在时就输出对象中存在的方法;

修改变量

let a = 111;
let b = 999;
const obj = {a: 23, b: 44, c: 91};
{a , b} = obj;

在这里插入图片描述

在 JavaScript 中,当使用解构赋值语法时,如果想要将属性值从对象中提取并赋给已经声明的变量,需要使用括号将整个解构表达式包裹起来。正确的如下:

let a = 111;
let b = 999;
const obj = {a: 23, b: 44, c: 91};
({a , b} = obj);
console.log(a,b);

在这里插入图片描述

解构嵌套数组

例如刚刚开始的那个对象,对象中有关于饭店开门关门的时间,就是一个对象中嵌套另一个对象,如果我们想知道周五开门和关门时间,如果将其从数组中解构出来呢?

const {fri: {open: o, close: c},} = openingHours;
console.log(o,c);

在这里插入图片描述

技巧:通过函数,直接通过参数解构

const restaurant = {name: 'Classico Italiano',location: 'Via Angelo Tavanti 23, Firenze, Italy',categories: ['Italian', 'Pizzeria', 'Vegetarian', 'Organic'],starterMenu: ['Focaccia', 'Bruschetta', 'Garlic Bread', 'Caprese Salad'],mainMenu: ['Pizza', 'Pasta', 'Risotto'],order: function (starterIndex, mainIndex) {return [restaurant.starterMenu[starterIndex],restaurant.mainMenu[mainIndex],];},oderDelivery: function({starterIndex = 1, mainIndex = 0, time='20:00',address,}) {console.log(`Order received! ${this.starterMenu[starterIndex]} and ${this.mainMenu[mainIndex]} will be delivered to ${address} at ${time}`);},
};restaurant.oderDelivery ({time: '22:30',address: "Via del Sole, 21",mainIndex: 2,starterIndex: 2,}
)

在这里插入图片描述

上面的代码是 restaurant 对象中的 oderDelivery 方法的实现部分。该方法接受一个对象作为参数,使用解构语法从该参数对象中提取需要的属性值。
具体来说,oderDelivery 方法接受一个对象作为参数,并从该对象中解构出以下属性:
● starterIndex:默认值为 1,表示前菜索引,默认为 1。
● mainIndex:默认值为 0,表示主菜索引,默认为 0。
● time:表示送餐时间,默认为 ‘20:00’。
● address:表示送餐地址。
然后,在方法内部,它使用解构出的属性值打印一条消息,表示订单已接收并将会在指定时间送到指定地址:

javascriptCopy Codeconsole.log(`Order received! ${this.starterMenu[starterIndex]} and ${this.mainMenu[mainIndex]} will be delivered to ${address} at ${time}`);

这段代码的作用是在控制台打印出一条包含订单信息的消息,其中包括了所选的前菜和主菜以及送餐地址和时间。


http://www.ppmy.cn/news/1245352.html

相关文章

解决Linux中文乱码、字体横向问题

解决Linux中文乱码问题 1、locale --查看当先系统编码集 2、echo $LANG --查看当前使用的语言 3、vim ~/.bash_profile --修改配置文件 4、加入以下语句 export LC_ALL"zh_CN.UTF-8" export LANG"zh_CN.UTF-8" 5、source ~/.bash_profile --更新配置文…

计网Lesson2 - 分层结构和分组交换

文章目录 计算机网络的组成网络的组成互联网与因特网 端系统体系结构分层物理层考虑的问题链路层考虑的问题网络层考虑的问题传输层考虑的问题应用层考虑的问题 计网的数据传输电路交换分组交换对比 计算机网络的组成 网络的组成 网络是由节点(node) 和 链路(link) 组成的。 …

递归实现选择排序.

思路: 1.定位数组中的最大元素或最小元素 2.将其与第一个元素交换位置 3.接着将剩余未排序的元素中的最大值或最小值与第二个元素交换位置 4.以此类推,直到排序完成 示例: [ 8, 5, 1, 9, 3 ] //原始数组 [ 1, 5, 8, 9, 3 ] //3与8交换 [ 1, 3, 8, 9, 5 ] //3与5交换 [ 1,…

C++ 问题 怎么在C++11标准语法中调用C++20的类

一. 问题 在工作中,因为一个算法功能需要跟别的部门对接,他们提供了该算法的头文件.h,静态库.lib,动态库.dll。但是头文件中使用了C++20才有的新特性,如#include等,而本地使用的vs2015开发环境,只支持C++11标准语法,这种情况下,该怎么把该算法集成到本地项目中呢? …

【matlab程序】matlab画台风符号和实例应用

【matlab程序】matlab画台风符号和实例应用 没有看文献,不知道文献中的符号什么样子,据我理解为这样子的: 因此,按照自己的理解做了这期。 结果浏览: 台风符号一切可改,可细细改。可是我不发论文&#xf…

防止应用程序截屏(容器式,防止极域电子教室和录屏软件录制)

核心原理、实现目的 1、使用Panel容器将外部窗口嵌入自己写的程序 2、使用防止截屏的函数来对窗口透明,这可以使本窗口内所有窗口在录屏软件上消失 3、解放,抓取,存储句柄,实现摆脱录屏(极域监控) 4、源…

Rocket mq producer源码分析

Producer生产者 1、启动时候获取变更的topic消息 org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#start(boolean)public void start(final boolean startFactory) throws MQClientException {switch (this.serviceState) {case CREATE_JUST:this.serviceSt…

智慧城市政务一网统管解决方案:PPT全文34页,附下载

关键词:智慧政务解决方案,智慧城市解决方案,智慧政务一网统管解决方案,一网统管治理理念,一网统管治理体系,一网统管治理手段,智慧政务综合服务平台建设 一、智慧城市政务一网统管建设背景 一…