Reputation: 175
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...
Upvotes: 4
Views: 492
Reputation: 7573
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] = 1;
}
Upvotes: 2
Reputation: 13060
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
.
Upvotes: 3