I read a handful of SOF posts on ternary operators but I'm still confused with this example:
var str = "I want to count";
var counts = {};
var ch, index, len, count;
for (index = 0; index < str.length; index) {
ch = str.charAt(index);
count = counts[ch];
counts[ch] = count ? count 1 : 1; // TERNARY
}
I know the syntax is condition ? expression1 : expression2
But I am trying to practice and break up the ternary into an if-else.
I don't know what the condition is supposed to be
counts[ch] = count // this isn't a condition, it's assigning a value...
CodePudding user response:
The ternary
counts[ch] = count ? count 1 : 1;
The condition in this expression is not counts[ch] = count
but just count
and is equivalent to
if (count){
counts[ch] = count 1;
}
else {
counts[ch] = 1;
}
The right hand side of an assignment expression is always evaluated first and the counts[ch]
is assigned the result of count ? count 1 ? 1
.
CodePudding user response:
You're conflating the ternary with the assignment expression.
The code
counts[ch] = count ? count 1 : 1;
can also be written as
counts[ch] = (count ? count 1 : 1);
// but not (counts[ch] = count) ? count 1 : 1
// that does something entirely different
And then, writing the matching if/else becomes pretty clear
if (count) {
counts[ch] = count 1;
} else {
counts[ch] = c1;
}
CodePudding user response:
Well, This is a condition.
counts[ch] = count ? count 1 : 1; // TERNARY
Corresponding if-else statement:-
if(count) counts[ch] = count 1
else counts[ch] = 1