Разрушить объект и переназначить другое имя переменной за один раз - PullRequest
0 голосов
/ 11 октября 2018

У меня есть объект:

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

, и я его разрушаю:

{ t: { en }}

возможно ли переназначить t на en в том же операторе деструктуризации?

Итак, я хочу, чтобы объект, присвоенный en в переменной t, а не в en

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вы можете сделать это в одну строку следующим образом:

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)

Мы можем выбрать псевдоним в назначении деструктуры, используя двоеточие.

0 голосов
/ 12 октября 2018

Когда вы разрушаете объект, вы можете указать 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);
0 голосов
/ 11 октября 2018

Нет, переназначить t невозможно, потому что t - это const.Если бы t не было a const, тогда да, было бы возможно переназначить его:

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

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

Обратите внимание, что

{ t: <something>

будет выполнено только с деструктуризацией, если бы t было свойством родительского объекта -но здесь t является автономной переменной, а не свойством, поэтому вместо этого начните с

{ en: <something>

с t на правой стороне *1027*.

Если t на самом деле является свойством родительского объекта, то вы можете сделать то же самое:

let obj = {
  "t":
    {
      "en": {
        "head" :"hello",
        "sub"  : "this is great"
      }
    },
  "link": {}
};
const { t: { en: t } } = obj;
console.log(t);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...