一次性解构对象并重新分配给不同的变量名

sup*_*ize 4 javascript syntax ecmascript-6

我有一个对象:

let obj = {
  "t":
    {
      "en": {
        "head" :"hello",
        "sub"  : "this is great"
      }
    }
  "link": {}
}
Run Code Online (Sandbox Code Playgroud)

我正在解构它:

{ t: { en }}
Run Code Online (Sandbox Code Playgroud)

是否可以在同一个解构语句中重新t分配en

en所以我想要分配给变量的对象t而不是en

Bar*_*mar 7

当您解构一个对象时,您可以指定propname: variablename将该属性分配给具有不同名称的变量。仅输入不带变量的属性名称相当于propname: propname对变量和属性使用相同的名称,但您不需要使用该快捷方式。

所以你可以这样做:

let obj = {
  "t":
    {
      "en": {
        "head" :"hello",
        "sub"  : "this is great"
      }
    }
}

let { t: { en: t } } = obj;
console.log(t);
Run Code Online (Sandbox Code Playgroud)

第一个t:只是一个属性名称,它指定该值是一个也需要解构的对象。在该结构中,我们使用propname: variablename语法,因此en属性被分配给t变量。

在函数定义中,这看起来像:

const Home = ({ t: { en: t }, link}) => console.log(t);

let obj = {
  "t":
    {
      "en": {
        "head" :"hello",
        "sub"  : "this is great"
      }
    }
};
Home(obj);
Run Code Online (Sandbox Code Playgroud)

请注意, 的两种用途之间没有实际关系t。该变量实际上可以是任何东西,例如

const Home = ({ t: { en: blah }, link}) => console.log(blah);
Run Code Online (Sandbox Code Playgroud)