首页 > 解决方案 > 如何在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 }

标签: javascript

解决方案


在这种情况下,您需要移动++before 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以供赋值使用。在这里,运算符不会相互冲突,因为它们都设置了相同的值。


推荐阅读