我正在尝试为以下车辆的阵列设置简单的频率计数功能:
int
使用了两个单独但相似的表达式: 我认为,两者都以相同的方式表示:如果veh不在对象中,则等于0,否则在obj中继续加1。但是,使用三元运算符的函数会为obj提供车辆名称,但所有车辆的名称均为0。
1。
const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck', 'airplane'];
结果:
let sumVeh = data.reduce((obj, veh) => {
if(!obj[veh]) obj[veh] = 0;
obj[veh]++;
return obj;
}, {})
2。
{car : 5, truck : 3, bike : 2....}
结果:
let sumVeh = data.reduce((obj, veh) => {
!obj[veh] ? obj[veh] = 0 : obj[veh]++;
return obj;
}, {})
为什么要这样做?我只是没道理...预先感谢!
答案 0 :(得分:3)
两个表达式不相等。三元运算符表达式与此代码等效:
if(!obj[veh]) obj[veh] = 0;
else obj[veh]++;
您看到这与您的版本1有何不同? obj[veh]
仅在已经是真实值的情况下才会递增。但是,在此之前只能是undefined
或0
-都是虚假的值。
这两个表达式完全不同,因为版本1递增obj[veh]
,而不管if语句的结果如何,而版本2仅在else条件下递增obj[veh]
。