javascript - Compare 3 values - Show the highest - Stack Overflow

Doing a survey where a user picks :A B or CI then need to know if the user has picked Mostly A's,

Doing a survey where a user picks :

A B or C

I then need to know if the user has picked Mostly A's, B's or C's.

I'm trying a few jQuery logics' but not having much luck, Due to expression expected error.

Is there a neater / better way to show purely which variable is the highest?

My current jQuery :

var count = 0;
var count_a = 0;
var count_b = 0;
var count_c = 0;

$('.radio-select').click(function()
{

    var chosen_option = $(this).val();

    if(chosen_option == 'a')
    {
        count++;
        count_a ++;
    }

    if(chosen_option == 'b')
    {
        count++;
        count_b ++;
    }

    if(chosen_option == 'c')
    {
        count++;
        count_c ++;
    }

    check_numbers(count, count_a, count_b, count_c);

})

function check_numbers(count, a, b, c)
{

    parseInt(a);
    parseInt(b);
    parseInt(c);

    if(count == '8')
    {
        if ((a > b ) && (a > c))
        {
            alert("A is Highest");
        }

        if ((b > a ) && (b > c))
        {
            alert("B is Highest");
        }

        if(c > b) && (c > a))
        {
            alert("C is highest!");
        }
    }

}

jsFiddle Example

Doing a survey where a user picks :

A B or C

I then need to know if the user has picked Mostly A's, B's or C's.

I'm trying a few jQuery logics' but not having much luck, Due to expression expected error.

Is there a neater / better way to show purely which variable is the highest?

My current jQuery :

var count = 0;
var count_a = 0;
var count_b = 0;
var count_c = 0;

$('.radio-select').click(function()
{

    var chosen_option = $(this).val();

    if(chosen_option == 'a')
    {
        count++;
        count_a ++;
    }

    if(chosen_option == 'b')
    {
        count++;
        count_b ++;
    }

    if(chosen_option == 'c')
    {
        count++;
        count_c ++;
    }

    check_numbers(count, count_a, count_b, count_c);

})

function check_numbers(count, a, b, c)
{

    parseInt(a);
    parseInt(b);
    parseInt(c);

    if(count == '8')
    {
        if ((a > b ) && (a > c))
        {
            alert("A is Highest");
        }

        if ((b > a ) && (b > c))
        {
            alert("B is Highest");
        }

        if(c > b) && (c > a))
        {
            alert("C is highest!");
        }
    }

}

jsFiddle Example

Share Improve this question edited Jun 30, 2017 at 8:24 StuBlackett asked Jun 30, 2017 at 8:06 StuBlackettStuBlackett 3,85915 gold badges71 silver badges116 bronze badges 5
  • Can you share a code example with fiddle or codepen ? :) – rsommerard Commented Jun 30, 2017 at 8:13
  • 2 Can you add your html, You can implement this easier with jquery – hasan Commented Jun 30, 2017 at 8:15
  • You can select element according to their values, then you can get count of values and pare them with more easier way – hasan Commented Jun 30, 2017 at 8:19
  • Note that you can shorten the logic in your click handler: jsfiddle/h4p87r0z – Rory McCrossan Commented Jun 30, 2017 at 8:19
  • 1 Please note that Math.max() works on any arbitrary number of values. developer.mozilla/en-US/docs/Web/JavaScript/Reference/… – Zoltan.Tamasi Commented Jun 30, 2017 at 8:29
Add a ment  | 

7 Answers 7

Reset to default 3

If you wanted a smaller way of doing it you could use inline if statements. Up to you if this is a better way, I like it though.

a = 5
b = 11
c = 6
console.log((a > b && a > c? a : (b > c ? b : c)))

Firstly you do not need to use parseInt() on a, b, c as they are already integers. And again count is an integer while you are paring it to a string. This should work.

if(count == 8)
{
    if ((a > b ) && (a > c))
    {
        alert("A is Highest");
    }

    else if ((b > a ) && (b > c))
    {
        alert("B is Highest");
    }

    else
    {
        alert("C is highest!");
    }

You need to fetch the value returned by parseInt. Use it like: a = parseInt(a); and same for the other variables before paring them in the if...else.

function check_numbers(count, a, b, c)
{
var x = parseInt(a),
    y = parseInt(b),
    z = parseInt(c);

if(count == 8)
{
    var result = (x > y ? (x > z ? x : z) : (y > z ? y : z));
}
}

@StuBlackett you can consider adding the values and labels to an array then sorting Descending and returning the lable at the top.

function CompareIndexZero(a, b) {
   if (a[0] < b[0]) return 1;
   if (a[0] > b[0]) return -1;
   return 0;
 }

function myFunction() {
var count_a = 2;
var count_b = 5;
var count_c = 4;

var arrHighest = [];
arrHighest.push([count_a, "A"]);
arrHighest.push([count_b, "B"]);
arrHighest.push([count_c, "C"]);

arrHighest.sort(CompareIndexZero);

alert(arrHighest[0][1] + " is the highest");
}

Here is a modified version of check_numbers() that works as intended if I got you right. The point I want to make is the use of Math.max() to find the highest number from a selection of numbers. https://developer.mozilla/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

function check_numbers(count, a, b, c) {

     if(count === 8) {
        var numArray = [a, b, c];
        var highest = Math.max.apply(null, numArray);
        console.log(highest);
        
        if (highest === a) {
          console.log('a is highest');
        } else if (highest === b) {
          console.log('b is highest');
        } else if (highest === c) {
          console.log('c is highest');
        }
        
    }

}

check_numbers(8, 1 , 2, 5);
check_numbers(8, 5, 2, 1);
check_numbers(8, 1 , 5, 2);

Have you also taken into account that multiple answers could share the highest count?

My 2 cents on that:

var count = count_a = count_b = count_c = 0;

$('.radio-select').on('click', function() {
    var chosen_option = $(this).val();
    if (chosen_option == 'a') {
      count_a++;
    }
    else if (chosen_option == 'b') {
      count_b++;
    }
    else if (chosen_option == 'c') {
      count_c++;
    }
    if (++count == 8) {
      check_numbers(count_a, count_b, count_c);
    }
});

function check_numbers(a, b, c) {
  var highest = ((a > b && a > c) ? a : (b > c)? b : c),
      multiple = false,
      alertText = '';
  if (a == highest) {
    alertText += 'A';
  }
  if (b == highest) {
    if (alertText != '') {
      multiple = true;
      alertText += ' and ';
    }
    alertText += 'B';
  }
  if (c == highest) {
    if (alertText != '') {
      multiple = true;
      alertText += ' and ';
    }
    alertText += 'C';
  }
  alert(alertText + ' ' + (multiple ? 'are' : 'is') + ' highest!');
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745210048a4616783.html

相关推荐

  • javascript - Compare 3 values - Show the highest - Stack Overflow

    Doing a survey where a user picks :A B or CI then need to know if the user has picked Mostly A's,

    9小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信