首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ES6:如何从嵌套的JS对象/对象数组中获取值,而不使用Switch-case语句

ES6提供了一种更简洁的方式来从嵌套的JS对象/对象数组中获取值,即使用解构赋值和可选的链式操作符。

  1. 解构赋值: 解构赋值是一种从数组或对象中提取值并赋给变量的方法。在嵌套的JS对象/对象数组中获取值时,可以使用解构赋值来简化操作。
代码语言:txt
复制
const obj = {
  foo: {
    bar: {
      baz: 'value'
    }
  }
};

const { foo: { bar: { baz } } } = obj;
console.log(baz); // 输出: value
  1. 可选链式操作符: 可选链式操作符(?.)是ES11(也称为ES2020)中引入的新特性,用于简化访问可能不存在的嵌套属性或方法的操作。它可以避免在访问嵌套属性或方法时遇到的"TypeError: Cannot read property 'xxx' of undefined"错误。
代码语言:txt
复制
const obj = {
  foo: {
    bar: {
      baz: 'value'
    }
  }
};

const value = obj?.foo?.bar?.baz;
console.log(value); // 输出: value

综合使用解构赋值和可选链式操作符,可以在ES6中从嵌套的JS对象/对象数组中获取值。

对于ES6的相关内容,可以参考以下链接:

腾讯云相关产品中,与云计算和前端开发相关的推荐产品有:

  • 云函数(Cloud Function):基于事件和触发器,实现云端运行特定的代码逻辑,可用于构建服务器端逻辑。了解更多请访问:云函数产品页
  • 云开发(Tencent CloudBase):提供一站式后端云服务,包括云数据库、云存储等功能,为前端开发者提供便捷的后端能力支持。了解更多请访问:云开发产品页
  • Serverless Framework:一个开源的前端应用框架,可快速搭建云上应用。了解更多请访问:Serverless Framework

请注意,以上仅是腾讯云相关产品的推荐,并不代表其他云计算品牌商的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 用表驱动代替switch-case

    不知道从什么时候开始,switch-case语句成了代码坏味道的代名词,写代码的时候小心翼翼地避开它,看到别人代码中的switch-case就皱眉头,想想其实大可不必这样,switch-case语句并不是代码坏味道的根源,坏味道来自糟糕的代码(结构)设计,比如过多的switch-case分支,或者多重switch-case嵌套等等,这些都将导致代码可读性下降,如果再加上代码风格较差,代码不对齐,那么坏味道就相当地大了。 简短的switch-case还是继续用吧,但是对于分支太多的长switch-case最好能想办法化解开,那么什么算长什么算短呢?我也不知道,就以在最低分辨率的显示器上能够在一个窗口中完整显示整个switch-case块为判断依据吧。化解长switch-case的方法有很多种,用函数封装或者宏取代case块是治标不治本的方法,使用表驱动通常是治疗这种顽症的有效方法,本文将介绍如何用表驱动方法化解长switch-case。 还是用例子说明问题吧,假设我们要为一个系统编写驱动,系统已经定义好了如下所示的复用接口(MUX): STATUS DriverIoControl(UINT function_no, PVOID para_in, PVOID para_out) 用户层程序通过复用接口调用驱动,功能号就是function_no,驱动程序负责实现具体的DriverIoControl()函数完成相应的功能。这是使用switch-case的典型场景,先看一个使用switch-case的方案: STATUS DriverIoControl(UINT function_no, PVOID para_in, PVOID para_out) { STATUS rc; switch(function_no) { case PROCESSA: rc = ProcessA(para_in,para_out); break; case PROCESSB: rc = ProcessB(para_in,para_out); break; case PROCESSC: rc = ProcessC(para_in,para_out); break; .......... default: rc = UN_SUPPORT; break } return rc; } STATUS ProcessA(PVOID para_in, PVOID para_out) { //一些代码.... } STATUS ProcessB(PVOID para_in, PVOID para_out) { //一些代码.... } STATUS ProcessC(PVOID para_in, PVOID para_out) { //一些代码.... } ................ 这个方案中规中矩,但是如果驱动很复杂,功能很多,那么DriverIoControl函数代码的长度是相当可观的,好像已经闻到坏味道了,呵呵。现在换成使用宏的解决方案: #define DISPATCH_BEGIN(func) switch(func) \ { #define DISPATCH_FUNCTION(func_c, function) case func_c: \ rc = function(para_in,para_out); \ break; #define DISPATCH_END(code) default: \ rc = code; \ } STATUS DriverIoControl(UINT function_no, PVOID para_in, PVOID para_out) { STATUS rc; DISPATCH_BEGIN(function_no) DISPATCH_FUNCTION(PROCESSA,ProcessA) DISPATCH_FUNCTION(PROCESSB,ProcessB) DISPATCH_FUNCTION(PROCESSC,ProcessC) ........................ DISPATCH_END(UN_SUPPORT) return rc; } 嗯,好一点,但好不到哪里去,只是用一行代替多行而已,并不能改变代码随着功能增多线性增长的趋势。罗嗦一下,我不喜欢宏的原因很简单,目前很少有(说实话,是我确实没有见过)调试器支持对宏的展开调试。这很麻烦,当一段掺杂着宏的代码没有达到预期的目的时,你不得不一遍一遍地在心里展开你的宏,以确定它是没有问题的(或者,你根本不能确定,只能假设它没有问

    05
    领券