2016-12-01 5 views
0

Есть ли способ лучше написать следующее ?:Использования отрицания охранника

t = { 
    name, 
    color, 
    teamId: !user?undefined:teamId, 
    userId: user&&user.id 
}; 

Таким образом, если пользователь определен, то я хотел бы использовать USERID, в противном случае TeamID.

const name = "Me"; 
 
    const color = "Red"; 
 
    let user; 
 
    let teamId = 10; 
 
    
 
    t = { 
 
     name, 
 
     color, 
 
     teamId: !user?undefined:teamId, 
 
     userId: user&&user.id 
 
    }; 
 
    
 
    console.log(t) 
 
    
 
    user = {id: 1}; 
 
    teamId = undefined; 
 
    
 
    t = { 
 
     name, 
 
     color, 
 
     teamId: !user?undefined:teamId, 
 
     userId: user&&user.id 
 
    }; 
 
    
 
    console.log(t)

+0

Почему бы не просто «if/else»? И ... даже верно ли вернуть словарь с некоторыми клавишами? (имя, цвет) – Cyrille

+0

@Cyrille JS не определяет словарь как встроенный объект, этот код возвращает объект типа 'any', созданный на месте прямо там. – gelliott181

+1

Мой JS должен быть действительно, действительно ржавым. Тем не менее, я считаю, что простой if/else будет приятнее читать :) – Cyrille

ответ

3

Это все еще немного неаккуратно, но это только проверяет для пользователя один раз и немного более читаемым

return user ? { name, color, "userId": user.id } : { name, color, "teamId": teamId }; 
2

Вы также можете сделать

{ 
    name, 
    color, 
    teamId: user ? undefined : teamId, 
    userId: user ? user.id : undefined 
}; 
+0

Можете ли вы, пожалуйста, изменить свой ответ так, чтобы вы задали значение undefined вместо false. Я обновил свой вопрос, чтобы подумать, что это то, что я за ним. – Baz