Попытка упростить это выражение JavaScript, имеющее дело с неопределенными

#javascript

Вопрос:

Я хочу сохранить undefined значение, если закреплено, на самом деле не определено, в противном случае я хочу установить значение через знак равенства равным 1, если закреплено верно, и 0, если это ложь. Я придумал, что это работает, но я продолжаю смотреть на это, и мне кажется, что это должно быть проще.

const resultingValue = pinned === undefined ? undefined : pinned ? 1 : 0;

Чего я хочу, так это:

если закреплено значение не определено, верните значение не определено, если закреплено значение true, верните 1, если закреплено значение false, верните 0 в противном случае, верните 0;

Комментарии:

1. typeof pinned === 'boolean' ? pinned : undefined

2. У вас уже есть эквивалентные ответы, но я рекомендую pinned === undefined ? undefined : Number(pinned) для удобства чтения.

3. Спасибо @Ry-, мне пока больше всего нравится ваш ответ.

Ответ №1:

Вы можете проверить тип и вернуть либо количество логических значений, либо undefined .

 const  resultingValue = typeof pinned === 'boolean'  ?  pinned  : undefined;  

Ответ №2:

Работает для: true , false , undefined , 0 , 1

 const resultingValue =  pinned   1 ?  pinned: undefined;  

Ответ №3:

Используйте таблицу подстановки для каждого значения. Это undefined может быть опущено, так как оно будет производиться undefined по умолчанию:

 const lookup = {true: 1, false: 0}; const convert = value =gt;   lookup[value];  console.log(convert(true)); console.log(convert(false)); console.log(convert(undefined)); console.log(convert()); 

При желании это можно сократить до одной функции:

 const convert = value =gt;   ({true: 1, false: 0}[value]);  console.log(convert(true)); console.log(convert(false)); console.log(convert(undefined)); console.log(convert());