【问题标题】:javascript get percentage of likes and dislikesjavascript获取喜欢和不喜欢的百分比
【发布时间】:2021-01-31 08:10:32
【问题描述】:

我有好恶之分,我试图找出两者的百分比。 问题是有时没有好恶,所以我无法计算。 第二个问题是,&& 运算符不起作用..

if (likes == 0 && dislike == 0) {
        setLikePercentage(50);
        setDislikePercentage(50);
    } else if (likes == 0) {
        setLikePercentage(0);
        setDislikePercentage(100);
    } else if (dislikes == 0) {
        setLikePercentage(100);
        setDislikePercentage(0);
    } else {
        setLikePercentage((likes / (dislikes + likes)) * 100);
        setDislikePercentage((dislikes / (dislikes + likes)) * 100);
    }

有解决办法吗?

【问题讨论】:

  • “不起作用”以什么方式?当你运行这段代码时会发生什么?您是否确认这些值是您所期望的 (console.log(likes, dislikes))?
  • @GuyIncognito 如果我记录它,控制台返回0 0,所以这是很好的值,它会自动转到else if (likes == 0)
  • 也许是因为你有 && dislike == 0 而不是 dislikes 结尾有 s?
  • 这里没有足够的代码来了解您实际在做什么。 - 您的代码将 setLikePercentage 和 setDislikePercentage 声明为函数。这些功能在哪里?喜欢/不喜欢的变量在哪里?

标签: javascript react-native operators percentage


【解决方案1】:

您可以将代码缩减为检查相同的值,其中包括零值和另一个用于计算百分比值。

if (likes === dislikes) {
    setLikePercentage(50);
    setDislikePercentage(50);
} else {
    setLikePercentage((likes / (dislikes + likes)) * 100);
    setDislikePercentage((dislikes / (dislikes + likes)) * 100);
}

【讨论】:

    【解决方案2】:

    您可以通过以下一般假设来简化事情:如果likesdislikes 的值相同,则它们是 50%。在所有其他情况下,您只想运行计算。

    这样,您可以摆脱前 3 个 if/else if 语句。我还假设likesdislikes 永远不会小于0。

    /**
    * Main Calcation
    */
    const doCalculation = (likes, dislikes) => {
      likes = likes && likes > 0 ? likes : 0;
      dislikes = dislikes && dislikes > 0 ? dislikes : 0;
      if (likes === dislikes) { return { likes: 50, dislikes: 50 }; }
      const total = likes + dislikes;
      return {
        likes: (likes / total) * 100,
        dislikes: (dislikes / total) * 100
      };
    };
    
    /**
    * For event handling/presentation purposes
    */
    const calculateLikes = () => {
      const likes = document.getElementById('likes').value
      const dislikes = document.getElementById('dislikes').value
      const result = doCalculation(+likes, +dislikes);
      document.getElementById('results').innerHTML = `
        <div>Likes: ${result.likes}%</div>
        Dislikes: ${result.dislikes}%
      `;
    };
    
    // Events
    document.getElementById('likes').addEventListener( 'keyup', calculateLikes );
    document.getElementById('dislikes').addEventListener( 'keyup', calculateLikes );
    <input placeholder="likes" id="likes" />
    <input placeholder="dislikes" id="dislikes" />
    
    <div id="results"></div>

    【讨论】:

      【解决方案3】:

      在 if 条件之前添加这两行;

      //check null status
      likes = likes || 0;
      dislikes = dislikes || 0;
      
      if (likes == 0 && dislike == 0) {
      ...
      

      || 是布尔 OR 运算符。与 javascript 一样,undefined, null, 0, false 被视为虚假值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多