表达相同但结果不同

时间:2020-01-15 19:03:19

标签: javascript object conditional-operator

我正在尝试为以下车辆的阵列设置简单的频​​率计数功能:

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;
}, {})

为什么要这样做?我只是没道理...预先感谢!

1 个答案:

答案 0 :(得分:3)

两个表达式不相等。三元运算符表达式与此代码等效:

if(!obj[veh]) obj[veh] = 0;
else obj[veh]++;

您看到这与您的版本1有何不同? obj[veh]仅在已经是真实值的情况下才会递增。但是,在此之前只能是undefined0-都是虚假的值。

这两个表达式完全不同,因为版本1递增obj[veh],而不管if语句的结果如何,而版本2仅在else条件下递增obj[veh]

相关问题