Как два троичных оператора работают вместе в JS? - PullRequest
0 голосов
/ 27 января 2020

Итак, я занимался проблемой кода в Интернете, и одно из решений показало следующее

function electionsWinners(votes, k) {
  var max=Math.max(...votes)
  var r=votes.filter(x=>x+k>max||x===max).length
  return k?r:r==1?1:0
}

Я не думаю, что специфика проблемы актуальна, меня больше интересует, как возврат постановка работает. Я вообще не понимаю, что возвращается, кажется, что используются 2 троичных оператора, но я не уверен, кто-нибудь может помочь мне понять, как именно работает этот оператор возврата?

Ответы [ 4 ]

0 голосов
/ 27 января 2020

Первый тест - k ? - это не k, не 0 / undefined / null? Если это так, вернуть r (r) иначе :, если r равно 1 (r==1 ?), вернуть 1 (1), в противном случае вернуть 0 (0))

0 голосов
/ 27 января 2020

Да 2 тернарных оператора возвращают k? R: r == 1? 1: 0

я поставлю код с полным IF

if(k) //not is null
  return r;
else
{
  if(r==1)
    return 1;
  else
    return 0;
}
0 голосов
/ 27 января 2020

Если вы преобразуете его в оператор if else, вы лучше поймете, что происходит:

if (k) {
  return r;
} else if (r === 1) {
  return 1;
} else {
  return 0;
}

или

if (k) {
  return r;
}
if (r === 1) {
  return 1;
}
return 0;
0 голосов
/ 27 января 2020

Вы можете посмотреть на

k?r:r==1?1:0

как на одно выражение. Каждый ? связан с его непосредственно следующим :, поэтому он эквивалентен:

k ? r : (r==1 ? 1 : 0)

, где второй условный оператор вступает в силу только в том случае, если k является ложным. В этом втором условии, если r равно 1, возвращается 1, в противном случае возвращается 0.

Может быть более понятным с отступом:

return (k
  ? r
  : (r == 1
    ? 1
    : 0
  )
);
...