ES6 динамическая деструкция - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно применить разную деструктуризацию для ответа функции в зависимости от глобального флага [один сервис для нескольких приложений]

// Destructuring template should be defined as value
let destructuringTemplate;
if (flag) {
   destructuringTemplate = {data: {classA: user}};
} else {
   destructuringTemplate = {data: {classB: user}};
}
// This technique would not work, this is just my idea representation.
this.getUser(({destructuringTemplate: user) => { this.localUser = user });

На данный момент это работает следующим образом:

let destructuringTemplate;
if (flag) {
   destructuringTemplate = ({data: {classA: user}}) => user;
} else {
   destructuringTemplate = ({data: {classB: user}}) => user;
}
this.getUser(response => { this.localUser = destructuringTemplate(response)};

это некрасиво, какое-то предположение, как это должно быть сделано?

Ответы [ 2 ]

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

Вам не нужно использовать деструктуризацию, используйте простые обозначения точек / скобок:

const userClass = flag ? 'classA' : 'classB'
this.getUser(response => { this.localUser = response.data[userClass] })

Если вы хотите использовать эту логику повторно, просто создайте простую функцию, например:

const extractUser = response => response.data[userClass]
0 голосов
/ 10 октября 2018

Вы можете использовать имя вычисляемого свойства с условным (троичным) оператором ?:.

var flag = true,
    object = { data: { classA: 'foo', classB: 'bar' } },
    { data: { [flag ? 'classA' : 'classB']: user } } = object,
    { data: { [!flag ? 'classA' : 'classB']: user1 } } = object;

console.log(user);
console.log(user1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...