【问题标题】:How can I shorten this ternary operator?如何缩短这个三元运算符?
【发布时间】:2019-01-08 09:30:23
【问题描述】:

我有存储从数据库检索到的信息的代码。

因为我的 JavaScript 代码是异步的并且需要时间来检索数据,我认为它会存储错误而不是数据。

有一个现有的辅助函数可以检查嵌套对象的最高级别。我想让这个函数更短,并阻止三元运算符返回''

const ratingAggregateCount = IsNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "count") ? currentProjectDetails.ratingAggregate.count : '';

const ratingAggregateAverage = sNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "average") ? currentProjectDetails.ratingAggregate.average.toFixed(1) : '';

const ratingWiseCounts = (!!currentProjectDetails.ratingWiseCounts ) ? currentProjectDetails.ratingWiseCounts : '';

【问题讨论】:

  • 您可以将const ratingWiseCounts = (!!currentProjectDetails.ratingWiseCounts ) ? currentProjectDetails.ratingWiseCounts : ''; 缩短为const ratingWiseCounts = currentProjectDetails.ratingWiseCounts || '';
  • @B001 是 !!true = true 但起初你得到 Null 或 Number ,这不是布尔值 所以示例 7 = 7,!7 = false ,!!7 = true,用它来得到真假。
  • 我想缩短三元运算符,例如删除值:" " .. 那个空白字符串和所有
  • @AkhilNair 三元组中的条件被视为布尔值,!! 是多余的。
  • @estus 哦!明白了,所以 (currentProjectDetails.ratingWiseCounts) 无论是真还是假!!

标签: javascript reactjs ternary-operator


【解决方案1】:

如果IsNestedObjectKeyPresent 助手主要用于此目的,则可以使用返回空字符串的助手:

const ratingAggregateCount = nestedObjectKeyOrEmptyString(currentProjectDetails, "ratingAggregate", "count");

这是Lodash get 等安全导航函数中的默认值参数的用途。

没有必要使用与条件相同的三进制值,它可能会短路:

const ratingWiseCounts = currentProjectDetails.ratingWiseCounts || '';

如果已知值是假的唯一可能性是undefined,则可以使用解构默认值:

const { ratingWiseCounts = '' } = currentProjectDetails;

【讨论】:

    【解决方案2】:

    您可以使用短路运算符&&

    const ratingAggregateCount = IsNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "count") && currentProjectDetails.ratingAggregate.count;
    
    const ratingAggregateAverage = sNestedObjectKeyPresent(currentProjectDetails, "ratingAggregate", "average") && currentProjectDetails.ratingAggregate.average.toFixed(1);
    
    const ratingWiseCounts = (!!currentProjectDetails.ratingWiseCounts ) && currentProjectDetails.ratingWiseCounts;
    

    例子

    const a = true && "assign";
    const b = "something" && "assign";
    const c = false && "not assign";
    const d = undefined && "not assign";
    const e = null && "not assign";
    const f = "" && "not assign";
    
    console.log({a,b,c,d,e,f});

    【讨论】:

    • 请注意,(!!currentProjectDetails.ratingWiseCounts ) && currentProjectDetails.ratingWiseCounts 将导致 false 而不是空字符串,以防万一它是假的。
    猜你喜欢
    • 2015-09-13
    • 2011-07-08
    • 2012-06-23
    • 2022-01-10
    • 2023-04-10
    • 2019-03-30
    • 2012-11-11
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多