Javascript(ES6),基于变量的destructure

ajm*_*jma 5 javascript destructuring ecmascript-6

我想知道是否有办法使用变量来解析javascript中的对象.在我的功能中我在做什么这样的事情 -

mutateTaxon(data) {
    const { content } = data;
    const { plp } = content || {};
    ...
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我需要根据另一个因素扩展此功能,如果我需要使用data.content它(现在正在使用)或者可以改变data.collection.所以我有另一个节点data- 它改变了对呼叫的呼叫.我正在尝试这样的事情 -

mutateTaxon(data) {
    const match = lowerCase(data.taxonomy.name);
    const { match } = data;
    const { plp } = match || {};
Run Code Online (Sandbox Code Playgroud)

匹配变量将评估内容或集合(如预期).但这似乎不起作用,也许这是不可能的?我想也许match需要评估var所以我尝试了类似的东西 -

const { [[match]] } = data;
Run Code Online (Sandbox Code Playgroud)

这也不起作用.也许这是不可能的,或者我正在接近这个错误.我想知道,这样的事情可能吗?谢谢!

Pat*_*rts 8

正如Jonas W.所说,解构语法会比括号表示法更麻烦,但是,这就是你要这样做的方法:

mutateTaxon(data) {
  const key = lowerCase(data.taxonomy.name);
  const { [key]: { plp } = {} } = data;
Run Code Online (Sandbox Code Playgroud)

演示

const foo = { bar: { plp: 'success' } }
const key = 'bar'
const { [key]: { plp } = {} } = foo

console.log(plp)
Run Code Online (Sandbox Code Playgroud)

并确认默认参数= {}按预期工作:

const foo = { }
const key = 'bar'
const { [key]: { plp } = {} } = foo

console.log(plp)
Run Code Online (Sandbox Code Playgroud)

  • @JonasW.哇,并不是故意偷走聚光灯.当我注意到你编辑的时候,我真的要删除我的答案,然后我得到了大量的upvotes oo; (2认同)

Jon*_*lms 6

 const key = lowerCase(data.taxonomy.name);
 const match = data[key];
Run Code Online (Sandbox Code Playgroud)

我不认为对象解构在这里很有用.但如果你需要:

  const key = lowerCase(data.taxonomy.name);
  const {[key]: match} = data;
Run Code Online (Sandbox Code Playgroud)