将嵌套对象解构为函数参数

时间:2017-06-12 15:37:28

标签: javascript ecmascript-6 destructuring

在ES6中我们可以做到:

let myFunc = ({name}) => {
  console.log(name)
}

myFunc({name:'fred'}) // => logs 'fred'

但是我该怎么做这样的嵌套属性:

myFunc({event:{target:{name:'fred'}}}) // => I want it to log 'fred'

myFunc应该是什么样子,以便记录'fred'?

我无法更改传入的对象。我希望使用解构来实现这个或其他一些合适的ES6方法。

3 个答案:

答案 0 :(得分:3)

您可以这样做:

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: name},
      {event: {target: {name: eventTargetName = ''} = ''} = ''} = ''
    ) => {
      console.log(name, eventTargetName)
    }

myFunc({name:'fred'})
myFunc({name:'papi'}, {event: {target: {name: 'fredo'}}})
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

试试这个:

@b

另见examples on MDN

答案 2 :(得分:0)

你可以这样做:

let myFunc = ( obj ) => {
    console.log(obj.event.target.name);
};

myFunc({ event: { target: { name: 'fred' } } });

或者:

let myFunc = ( {event: {target: { name } } } ) => {
    console.log(name);
};

myFunc({ event: { target: { name: 'fred' } } });