首页 \ 问答 \ 嵌套对象解构[重复](Nested Object destructuring [duplicate])

嵌套对象解构[重复](Nested Object destructuring [duplicate])

这个问题在这里已有答案:

在解构对象时,我有时会遇到不知道密钥是否存在的问题,然后尝试从它们中提取值。 这显然是错误,因为它们是未定义的。 例如:

期待这样的事情:

{ user: { name: { first: 'Trey', last: 'Hakanson' } } }

但我实际上得到了这个:

{ user: {} }

并试图像这样的错误解构:

const { user: { name: { first: firstName, last: lastName } } } = data

有什么方法可以在解构前面分配一个默认值吗? 例如,如果name键不存在,则分配name = { first: 'Hello', last: 'World' }


This question already has an answer here:

When destructuring objects, I sometimes run into the issue of not knowing whether or not keys exist, and then trying to pull values from them. This obviously errors, since they are undefined. For example:

Expecting something like this:

{ user: { name: { first: 'Trey', last: 'Hakanson' } } }

But I actually get this:

{ user: {} }

and attempting to destructure like this errors:

const { user: { name: { first: firstName, last: lastName } } } = data

is there any way to assign a default value earlier in the deconstruction? Such as assigning name = { first: 'Hello', last: 'World' } if the name key doesn't exist?


原文:https://stackoverflow.com/questions/41171421
更新时间:2020-02-18 07:00

最满意答案

const { user: { name: { first: firstName = 'firstName', last: lastName = 'lastName' } = {} } = {} } = data

const { user: { name: { first: firstName = 'firstName', last: lastName = 'lastName' } = {} } = {} } = data
2016-12-15

相关问答

更多

对象解构:如何使用中间嵌套属性(object destructuring: how to use intermediate nested property)

我能想到的最接近的是: var { iWantThis, iWantThis: { andThis, andThisToo } } = x; 我以为我会使用let ,如果我使用的是ES6;) The closest I can come up with is: var { iWantThis, iWantThis: { andThis, andThisToo } } = x; Thought I'd use let instead, if I'm using ES6 ;)

JS嵌套对象中的解构对象(Destructuring Object in JS - Nested Object)

你能用这个吗? const {user} = xhrResponse.person || {}; 对于更新的用例,我想知道这是否可行? $q.all([ somePromise, someOtherPromise, getPersonPromise.then(res => (res.person || {}).user) ]).then(promises => [vm.promise1, vm.promise2, vm.user] = promises); Could you ju ...

将嵌套对象解构为函数参数(Destructuring nested objects as function parameters)

你可以这样做: const myFunc = ({event: {target: {name}}}) => { console.log(name) } myFunc({event: {target: {name: 'fred'}}}) .as-console-wrapper { max-height: 100% !important; top: 0; } 这是另一个实现,两个参数都有,但第二个完全是optionnal: const myFunc = ( {name: n ...

对象解构(Object Destructuring)

您可以使用三元运算符一次定义doc all来测试条件。 如果需要删除undefined属性,则可以通过reduce删除它们。 const { _id, name, bio, birth_date, photos, instagram, gender, jobs, schools } = element const myPhotos = photos.map(({ id }) => id) const insta = !instagram ? undefined : (() => { const ...

嵌套对象解构:重复声明“fontSize”(Nested object destructuring: Duplicate declaration “fontSize”)

您的解构声明基本上等同于 const fontSize = shevy.h1.fontSize, fontSize = shevy.p.fontSize; 这显然是无效的。 如果要对它们进行解构,则需要将它们分配给不同的变量。 我认为p的fontSize将被限定为p并且h1到h1以便styled.p知道使用哪个fontSize 。 不,没有这样的范围,它与嵌套对象没有任何关系。 解构目标中的所有变量都在同一范围内声明 - 它们只是普通的const变量,没有任何附加的命名空间。 请记住 ...

通过解构为新对象赋值(Assign value to new object via destructuring)

用分号终止let obj = {}行解决了这个问题: let parameter = {id : 10, username : 'john'}; let obj = {}; ({id : obj.iduser, username : obj.user} = parameter); console.log(obj); Terminating the let obj = {} line with a semicolon solves this: let parameter = {id : 10, ...

Javascript重新赋值变量与解构[重复](Javascript re-assign let variable with destructuring [duplicate])

({ latitude, longitude } = props.userLocation.coords); 解构需要在let , const或var声明之后,或者需要在表达式上下文中,以区别于块语句。 ({ latitude, longitude } = props.userLocation.coords); Destructuring needs to be either after a let, const or var declaration or it needs to be in ...

嵌套对象解构[重复](Nested Object destructuring [duplicate])

const { user: { name: { first: firstName = 'firstName', last: lastName = 'lastName' } = {} } = {} } = data const { user: { name: { first: firstName = 'firstName', last: lastName = 'lastName' } = {} } = {} } = data

如何使用对象解构处理嵌套的默认参数?(How to handle nested default parameters with object destructuring?)

用于解构对象属性的通用模式是 { … , propertyName: target = defaultInitialiser, … } (当属性名称与目标变量标识符完全相同时,我们可以加入它们)。 但target不仅仅是变量,它可以是任何赋值目标 - 包括嵌套的解构表达式。 因此,对于您的情况(3),您希望在参数的顶层使用与(1)完全相同的方法 - 默认使用空对象初始化属性并对其部分进行解构: function fn3({foo = 'Foo', bar: {quux = 'Quux', cor ...

对象分配的嵌套解构(Nested Destructuring on Object Assignments)

对于嵌套级别,您可以重复相同的语法,如同对顶级进行解构: 根据您的评论编辑 我需要数组中的对象 let node = { ItemTitle: 'Title', ItemId: 5, Menu: {Item: [{ItemId: 579}]} } let { ItemId: id, // extract `node.ItemId` into a variable called `id` ItemTitle: title, // extract `n ...

相关文章

更多

最新问答

更多
  • 如何保护Solr只允许SELECT请求给用户并禁止其他任何东西?(How to secure Solr to allow SELECT request to only users and disallow anything else?)
  • XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
  • css3 3D变换不能平滑地制作动画(css3 3D transform doesn't animate smoothly)
  • 运行时错误'91'和Outlook.Application = <对象变量或没有设置块变量>?(Run-time error '91' & Outlook.Application = Object variable or With block variable not set?)
  • 慢的webservice问题(Slow webservice problem)
  • textview的不正确对齐方式(Improper alignment of a textview)
  • 在第一步“Hello World”中出现Java错误(Cannot run “Hello World” program in Eclipse)
  • 为什么十六进制地址是14个字符?(why the hex address is 14 character?)
  • 如何在Python中的不同类中使用变量?(How to use variable in different classes in Python?)
  • asp:GridView HYPERLINKFIELD - datanavigateurlformatstring中的asp代码(asp:GridView HYPERLINKFIELD - asp code inside datanavigateurlformatstring)
  • 关于adaboost算法(About adaboost algorithm)
  • 在Matlab上内置图像(Built in Images on Matlab)
  • java swing:输入键事件时焦点丢失(java swing: Focus lost on enter key event)
  • C#中的通用约束,T是相同的TSomethingElse,对吧?(Generic constraints in C#, T is the same TSomethingElse, right?)
  • 从mybatis中的光标获取数据(Fetching data from cursor in mybatis)
  • 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)
  • 在整个窗口中拉伸sf :: Sprite(Stretch sf::Sprite across entire window)
  • Selenium Node API Web驱动程序等待超时处理程序(Selenium Node API web driver wait timeout handler)
  • 函数使用并且是map的一部分(循环依赖?)(Function uses and is part of map (circular dependency?))
  • 是否可以在C ++ 14中使用可选模板参数创建类型元组?(Is possible to make a tuple of types with optional template parameters in C++14?)
  • PHP从窗帘后面打印/ f(PHP prints /f from behind the curtains)
  • JFrame的contentPane的LayoutManager(LayoutManager of JFrame's contentPane)
  • 用于Instagram Feed的图像滚动(Image Roll Overs for Instagram Feed)
  • 如何显示拉伸字体(双倍宽度/高度)?(How to display stretched font (double width/height)?)
  • 文件操作API在fileapi.h和stdio.h中的WP8差异?(WP8 differences between file manipulation APIs in fileapi.h and stdio.h?)
  • 保存失败后Rails没有回滚事务()(Rails not rolling back transaction after failed save())
  • jqgrid中的分页问题与数组数据(Pagination problem in jqgrid with array data)
  • 重定向时,通过其他页面上的URL调用javascript函数(Call javascript function through url on otherpage while Redirecting)
  • 如何使用InvokeCommandAction调用我的方法并传入参数?(How do I go about using InvokeCommandAction to call a method of mine and pass in parameters?)
  • Jquerymobile按钮仅显示页面的第一个外观(Jquerymobile buttons are shown only first apperance of the page)