如何在javascript中使用条件(三元)运算符

时间:2018-05-26 17:28:38

标签: javascript

给定一个字符串,我需要得到字符串中每个字符的出现次数。

Input : "Hello world" 
Expected Output : { H: 1, e: 1, l: 3, o: 2, ' ': 1, w: 1, r: 1, d: 1 }

当我使用if else条件时,逻辑工作正常,但不能使用三元运算符。

const string = "Hello world";
const chars = {};

for(let char of string) {
    if(!chars[char]) chars[char] = 1;
    else chars[char]++;
}
console.log(chars); // { H: 1, e: 1, l: 3, o: 2, ' ': 1, w: 1, r: 1, d: 1 } 


但是,当我用三元运算符替换if else条件时,输出是意外的

chars[char] = !chars[char] ? 1: chars[char]++
console.log(chars); // { H: 1, e: 1, l: 1, o: 1, ' ': 1, w: 1, r: 1, d: 1 }

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要在++之前移动chars[char]

chars[char] = !chars[char] ? 1 : ++chars[char]

或者只是一个补充:

chars[char] = !chars[char] ? 1 : chars[char] + 1
  

或者,甚至更短:

chars[char] = (chars[char] || 0) + 1

是否在值之前或之后放置++会更改它返回的值:

  • 在(chars[char]++)之后,运算符将返回原始值1,因为它递增到2。然后,赋值运算符将收到1并将其放回chars[char],撤消增量。

  • 在(++chars[char])之前,运算符将返回修改后的值2,以供分配使用。在这里,运营商不会相互冲突,因为他们都设置了相同的价值。

答案 1 :(得分:1)

您正在将chars[char]设置为chars[char]++结果,即0

您想:chars[char] = !chars[char] ? 1: chars[char]+1