【问题标题】:JavaScript: how pass edge cases with ternary conditionsJavaScript:如何通过三元条件的边缘情况
【发布时间】:2019-12-03 11:40:41
【问题描述】:

我如何在可能发生的一些极端情况下实现。

//边缘情况 如果mediaTypeundefined,它应该返回undefinedinfinity,如果mediaTypexs,它应该返回xs 并使用当前实现。

//代码当前实现

function getCurrentBreakpoint(mediaType) {
  const mediaTypes = ["xs", "sm", "md", "lg", "xl", "infinity"];
  return mediaTypes[mediaTypes.indexOf(mediaType) - 1];
}

这里有任何帮助。

【问题讨论】:

  • @AakashChauhan 从xsinfinity 都可以

标签: javascript arrays reactjs if-statement


【解决方案1】:

你可以使用Array#find:

function getCurrentBreakpoint(mediaType) {
  const mediaTypes = ["xs", "sm", "md", "lg", "xl", "infinity"];
  return mediaTypes.find(mt => mt === mediaType);
}

console.log(getCurrentBreakpoint('xs'));
console.log(getCurrentBreakpoint('foo'));
console.log(getCurrentBreakpoint());

如果你真的想使用三元运算符,你可以使用它来代替。

return mediaTypes.includes(mediaType) ? mediaType : undefined

【讨论】:

    【解决方案2】:

    您可以通过简单的操作来检查 mediaType 是否未定义

    if (!mediaType) {
    /* ... */
    }
    

    目前尚不清楚您调用函数的上下文,但如果您想返回 undefined(我认为这不是一个好的做法),您可以这样做:

    if (!mediaType) {
        return mediaType
    }
    

    编辑:用户将帖子和标题更改为与三元组一起使用。

    那就是

    return !mediaType ? mediaType : /* whatever */
    

    如果它是另一种方式,并且您希望它始终被定义,您可以使用二进制条件:

    return mediaType && /* whatever */
    

    【讨论】:

    • @jenero 它应该只使用三元运算符。
    • @TanmoySarkar - 为什么?你在你的问题中说你想使用“if/else”
    • 我真的很糟糕。我必须尽可能简单地使用它,因为我之前用switchif-else 条件尝试过这个。
    • 还有一个三元运算符,它是 return !mediaType ? mediaType : mediaTypes[mediaTypes.indexOf(mediaType) - 1];
    • xs 类型中断。
    【解决方案3】:

    试试这个

    function getCurrentBreakpoint(mediaType) {
        const mediaTypes = ["xs", "sm", "md", "lg", "xl", "infinity"];
    
        const index = mediaTypes.indexOf(mediaType);
    
        if(index !== -1){
            return mediaTypes[index];
        }
    
        return "infinity";
    }
    

        function getCurrentBreakpoint(mediaType) {
            const mediaTypes = ["xs", "sm", "md", "lg", "xl", "infinity"];
    
            return mediaTypes.find(ele => ele === mediaType) || "infinity";
        }
    

    【讨论】:

    • @TanmoySarkar 我可以知道场景吗?
    • 当前代码不会返回 mediaType 之前的索引值。
    【解决方案4】:

    可能的解决方案:

          function getCurrentBreakpoint(mediaType) {
              const mediaTypes = ["xs", "sm", "md", "lg", "xl", "infinity"];
              return mediaType=="xs"?"xs":mediaTypes[mediaTypes.indexOf(mediaType) - 1]?mediaTypes[mediaTypes.indexOf(mediaType) - 1]:"infinity";
           }
    

    【讨论】:

    • 这是我的错。我被错误地解释了这个问题。我已经编辑了我的答案,请再次检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多