2017-06-30 79 views
0

,其中用戶拿起做的一項調查顯示:比較3個值 - 顯示最高

A B或C

然後我需要知道,如果用戶大多選擇了一個公司,B公司和C公司。

我正在嘗試幾個jQuery邏輯'但沒有太多的運氣,由於表達預期的錯誤。

是否有更純粹/更好的方式來純粹顯示哪個變量最高?

我目前的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

+0

您可以與一個代碼示例[小提琴](https://jsfiddle.net/)或[codepen(https://codepen.io)? :) – rsommerard

+2

你可以添加你的html,你可以用jquery實現這個更容易 – hasan

+0

你可以根據它們的值選擇元素,然後你可以得到值的數量並且以更簡單的方式比較它們 – hasan

回答

2

首先你不需要在a,b,c上使用parseInt(),因爲它們已經是整數了。當你將它與一個字符串進行比較時,count又是一個整數。這應該工作。

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!"); 
    } 
1

你需要獲取由parseInt返回的值。使用它像a = parseInt(a);和其他變量相同,然後在if...else比較它們。

+0

確實如此,但整個'parseInt'的東西似乎對我來說是多餘的。只要刪除這三條線。 – vi5ion

3

如果你想要一個更小的方法來做到這一點,你可以使用內聯if語句。如果這是更好的方法,那麼我喜歡它。

a = 5 
b = 11 
c = 6 
console.log((a > b && a > c? a : (b > c ? b : c))) 
1
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)); 
} 
} 
1

這裏是check_numbers的修改版本()如預期,如果我得到你的權利的作品。我想要做的一點是使用Math.max()從一系列數字中找出最高的數字。 https://developer.mozilla.org/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);

1

@StuBlackett可以考慮增加值和標籤到一個數組,然後排序降序,並在頂部返回拉布勒。

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"); 
} 
1

你是否也考慮過多個答案可以分享最高的計數?

我的2美分處爲:

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!'); 
}