JavaScript解构对象

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

前言

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

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.hqwc.cn/news/223413.html

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

相关文章

【python】--文件/文件夹读写及操作

目录 一、文件读写1、文件读写代码示例 二、文件/文件夹操作1、代码示例 一、文件读写 读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后通过操作系统提供的接口从这个文件对象中读取数据(读文件)…

87基于matlab的双卡尔曼滤波算法

基于matlab的双卡尔曼滤波算法。第一步使用了卡尔曼滤波算法,用电池电压来修正SOC,然后将修正后的SOC作为第二个卡尔曼滤波算法的输入,对安时积分法得到的SOC进行修正,最终得到双卡尔曼滤波算法SOC估计值。结合EKF算法和安时积分法…

kafka开发环境搭建

文章目录 1 安装java环境1.1 下载linux下的安装包1.2 解压缩安装包1.3 解压后的文件移到/usr/lib目录下1.4 配置java环境变量 2 kafka的安装部署2.1 下载安装kafka2.2 配置和启动zookeeper2.3 启动和停止kafka 1 安装java环境 1.1 下载linux下的安装包 (1&#xf…

Couchdb 权限绕过漏洞复现(CVE-2017-12635)

Couchdb 权限绕过漏洞复现(CVE-2017-12635) ​​ 开启环境给了三个端口号,不知道哪个是正常的,最后试出来52226端口正常。 登录URL:http://192.168.91.129/_utils/# 来到了登录页面 ​​ 用postman发送PUT方法的…

Go 语言学习:了解 const 关键字及常量声明

如果一个变量应该有一个固定的、不能改变的值,你可以使用const关键字。 const关键字将变量声明为"常量",这意味着它是不可改变和只读的。 语法 const CONSTNAME type value 声明常量 声明常量的示例: package main import (…

计算机组成原理——存储器(主存容量扩展)

对于字扩展与位扩展的解释: 计算机原理中的字,位扩展,都给老子进来学,看不懂算我输! 如果主存的容量无法满足 CPU 的需求,可以通过存储器扩展来解决,扩展的方式有两种: 主存的位数…

中文编程开发工具高级版全部构件工具箱列表,中文编程自由版下载

中文编程开发工具高级版全部构件工具箱列表,中文编程自由版下载 附:中文编程工具构件工具箱总共22组305个构件,构件明细如下:文本件16个: (普通标签,连接标签,闪动标签,立…

MATLAB的rvctools工具箱熟悉运动学【机械臂机器人示例】

1、rvctools下载安装 rvctools下载地址:rvctools下载 截图如下,点击红色箭头指示的“Download Shared Folder” 即可下载 下载之后进行解压,解压到D:\MATLAB\toolbox这个工具箱目录,这个安装路径根据自己的情况来选择&#xff0c…

element 的 Notification 通知,自定义内容

通知事件: // 商户后台通知 MerchantBackgroundNotice() {// 禁止消息通知弹出多条if(this.notifyInstance) {this.notifyInstance.close();}const h this.$createElement; // 创建文本节点this.notifyInstance this.$notify({showClose: false, // 禁止关闭按钮…

Flink CDC -Sqlserver to Sqlserver java 模版编写

1.基本环境 <flink.version>1.17.0</flink.version> 2. 类文件 package com.flink.tablesql;import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.flink.streaming.api.environment.StreamExecutionEnviro…

【从删库到跑路 | MySQL总结篇】表的增删查改(进阶上)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、数据…

【C语言】【选择排序及其优化】

选择排序是指&#xff1a;第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后再从剩余的未排序元素中寻找到最小&#xff08;大&#xff09;元素&#xff0c;然后放到已排序的序列的末尾&#xff0…