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

时间:2018-10-11 19:12:22

标签: javascript ecmascript-6 syntax

我有一个对象:

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

我正在破坏它:

{ t: { en }}

是否可以在相同的解构语句中将t重新分配给en

所以我希望在变量en中分配给t的对象不在en

3 个答案:

答案 0 :(得分:1)

否,因为iOS 11iOS 11,所以无法重新分配t。如果t 一个const,则可以,可以重新分配它:

t

请注意

const

仅在let t = { "en": { "head": "hello", "sub" : "this is great" } }; ({ en: t } = t); console.log(t);是父对象的属性的情况下才能进行结构分解-但是,{ t: <something> 是一个独立变量,而不是属性,因此,开始与

t

在右侧的 端带有t

如果{ en: <something> 实际上父对象的属性,那么您可以做同样的事情:

t

答案 1 :(得分:1)

在分解对象时,可以指定propname: variablename将属性分配给具有不同名称的变量。仅使用不带变量的属性名称等效于propname: propname,以对变量和属性使用相同的名称,但是您无需使用该快捷方式。

因此您可以这样做:

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

let { t: { en: t } } = obj;
console.log(t);

第一个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);

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

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

答案 2 :(得分:0)

您可以按以下方式一行执行此操作:

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

// here we are destructuring en but declaring 
// it as a variable which is called t
let { en: t } =  obj.t;

console.log(t)

我们可以在分解任务中使用冒号选择一个别名。