javascript - 如何在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 }
解决方案
在这种情况下,您需要移动++
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
以供赋值使用。在这里,运算符不会相互冲突,因为它们都设置了相同的值。
推荐阅读
- sql - SQL Server 删除 ID 列上的值
- python - 在 PowerShell 中将值添加到嵌套对象中,就像在 Python 中一样
- python - 如何使用 Python 访问 Firestore 地理点对象的纬度和经度(这应该很容易!)?
- python - Pandas dataframe plot():x轴日期标签显示但不显示数据
- dynamics-crm - Dynamics CRM 实体安全角色
- javascript - Mongoose:“无法读取未定义的属性 'forEach'”
- python - 无法使用 Subprocess.Popen() 打开文件
- pdf - 获取 AATL 证书以在我的基于云的服务中使用
- python - 所有测试返回 json.decoder.JSONDecodeError:
- xamarin - MvvmCross CloseTo ViewModel