解构嵌套对象和默认值

18

我正在使用解构来声明一些变量,就像这样:

const { a, b, c } = require('./something'),
    { e = 'default', f = 'default'} = c;
这能否改成单行显示呢?我尝试过以下代码:

const { a, b, c = { e = 'default', f = 'default'} } = require('./something');

但是它给出了一个错误:

SyntaxError:无效的简写属性初始化值

3个回答

24

如果对象中没有c,则上述代码将不起作用。

const { a, b, c: { e = 'default', f = 'default'}} = {a: 1, b: 2}
console.log(`a: ${a}, b: ${b}, e: ${e}, f: ${f}`)

This will print out an error. For completion, you could as a simple "={}" as default

const { a, b, c: { e = 'default', f = 'default'} ={} } = {a: 1, b: 2}
console.log(`a: ${a}, b: ${b}, e: ${e}, f: ${f}`)


在上面的例子中,如果我想要取c [0]怎么办?如果c [0]不存在,则应返回空对象。const obj = { a:'a',b:{},c:[]} - Nikhil Mahirrao

17

只需将=替换为:即可:

const {a, b, c: {e = 'default', f = 'default'}} = require('./something')

演示:

const { a, b, c: { e = 'default', f = 'default'} } = {a: 1, b: 2, c: {e: 3}}
console.log(`a: ${a}, b: ${b}, e: ${e}, f: ${f}`)

它会打印出:

a: 1, b: 2, e: 3, f: default

1
如果你使用 const { a, b, c: { e = 'default', f = 'default'} } = {a: 1, b: 2} 进行解构,那么这段代码将无法工作,并会引发 TypeError 错误。 - lochiwei

4
这个例子将帮助你理解在解构arrayobject时如何加入fallback值。
你可以使用=符号在解构时添加fallbackdefault值。

const person = {
  firstName: 'Nikhil',
  address: {
    city: 'Dhule',
    state: 'MH'
  },
  /*children: [
    { 
      name: 'Ninu',
      age: 3
    } 
  ]*/
}

const { 
  firstName, 
  address: {
    city,
    state
  },
  children: { 
    0: { 
      name='Oshin' // Fallback for name is string i.e 'Oshin'
    }={} // Fallback for 1st index value of array is blank object
  }=[] // Fallback for children is blank array
} = person;
  
console.log(`${firstName} is from ${city} and his first child name is ${name}`);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接