代码之家  ›  专栏  ›  技术社区  ›  Alfred Balle

javascript,从.find或0赋值

  •  -1
  • Alfred Balle  · 技术社区  · 6 年前

    我正试图从 .find 具有 Javascript :

    car.km = (my_cars.find(function (obj) { return obj.car_id === car.id }).drove) || 0)
    

    如果没有与以下内容匹配的汽车ID,则失败:

    TypeError: Cannot read property 'drove' of undefined
    

    但我想用 || 0 所以 0 如果没有 .drove . 但不起作用,怎么做?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Arup Rakshit    6 年前

    您可以将代码重写为:

    car.km = (
      my_cars.find(function(obj) {
        return obj.car_id === car.id;
      }) || { drove: 0 }
    ).drove
    

    在本代码中,如果 find 看不到任何匹配的汽车ID,它会返回 undefined . 当你得到 未定义 找到 功能,然后在 || 接线员您可以返回 car 像只有一个属性的对象 drove 然后打电话 .drove 最后。

        2
  •  1
  •   AntoineB    6 年前

    你没有检查 find 没有找到任何内容,您正在检查属性 drove 关于结果 找到 为空。

    我认为最可读的方法是将find的结果存储在一个变量中,并用两行来完成。

    let car = my_cars.find(function (obj) { return obj.car_id === car.id });
    car.km = car ? car.drove : 0;
    
        3
  •  0
  •   Ankit Agarwal    6 年前

    您需要将代码更改为:

    var car = my_cars.find(function (obj) { return obj.car_id === car.id });
    car.km = car ? car.drove : 0;
    

    这是因为 my_cars.find(function (obj) { return obj.car_id === car.id }) 可以给你 undefined 如果找不到匹配项,建议将结果分配给 find 在访问属性之前转换为变量 drove .