给定一个字符串,我需要得到字符串中每个字符的出现次数。
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 }
答案 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