user1854438 user1854438 - 3 months ago 10
Javascript Question

How can I create a variable condition as a parameter in javascript?

I want to test how many red/black/even/odd comes up in a row in the game of roulette.

The following function will loop through a list of spins n and give how many times in a row red won and lost. The same function can be used for all the other types of even wins however the check is different

color[n[i]] == "red"


I want to pass a different check into this function to test for evens

n[i]%2 == 0


Can this be done?

function test(n)
{
var wins = parseInt(0);
var losses = parseInt(0);

for(var i=0;i<n.length;i++)
{
if(color[n[i]] == "red")
{
wins += 1
losses = 0
}
else
{
wins = 0
losses += 1
}

}
.
.
.


PART 2

This is the full code. If you click the 'Enter Spins' button and the 'Toggle Number Pad' button, then add the number 8 twice, then 3 alerts will display.

I can not seem to get the the 3 messages to show up on separate lines. I tried some examples, but it always adds the line return before the last message.
Do you know how to get the multiple messages on separate lines?

<html>
<head>
<style>
.bntcal {
padding: 10px 10px 10px 10px;
margin: 10px;
}
.bntcaladd {
padding: 10px 10px 10px 10px;
margin: 10px;
}

.bntshow{
padding: 5px 5px 5px 5px;
margin: 5px;
width: 10%;
}
.spanhide {
display: none;
}
.bell {
float:left;
display: none;
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var wheel0 = [37,32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26];
var wheel00 = [37,28,9,26,30,11,7,20,32,17,5,22,34,15,3,24,36,13,1,38,27,10,25,29,12,8,19,31,18,6,21,33,16,4,23,35,14,2];
var wheel = wheel00;
var wColor = "";
var numbers = [];
var color = [];



$(document).ready(function(){

// --- Menu Buttons
$("#enterSpins").click(function(){
$("#divSpins").show();
$("#divAlerts").hide();
$("#divHowTo").hide();
});

$("#setAlert").click(function(){
$("#divAlerts").show();
$("#divSpins").hide();
$("#divHowTo").hide();
});

$("#howTo").click(function(){
$("#divHowTo").show();
$("#divSpins").hide();
$("#divAlerts").hide();

});

// ---- Sub Buttons
$("#enterPad").click(function(){
$("#showSpinsPad").toggle();
$("#clearBox").toggle();
$("#clearBox1").toggle();
if(!$("#showSpinsPad").is(":hidden"))
{
$("#spins").prop("disabled", true)
}
else
{
$("#spins").prop("disabled", false)
}

});

$(".bntcal").click(function(){
$("#currentSpin").text($("#currentSpin").text()+$(this).val())
if ($("#currentSpin").text().length > 2)
{
$("#currentSpin").text($(this).val())
}
});


$("#clear").click(function(){
$("#currentSpin").text("")
});

$("#add").click(function(){

getWheel()
currentSpin = $("#currentSpin").text()
if(currentSpin.length > 0)
{
if ($("#spins").val().length > 0)
{
$("#spins").val($("#spins").val() + ", ");
}
if(parseInt(currentSpin)<37)
{
$("#spins").val($("#spins").val() + currentSpin);
}
if(parseInt(currentSpin) == 37)
{
$("#spins").val($("#spins").val() + "0");
}
if(parseInt(currentSpin) == 38)
{
$("#spins").val($("#spins").val() + "00");
}
if(parseInt(currentSpin)>38)
{
$("#spins").val($("#spins").val() + "0");
}

$("#currentSpin").text("")
}

var n = GetUserNumbers();
run(n)
});

$("#undo").click(function(){
var n = GetUserNumbers();

if (n.length>0)
{
n.pop();
}
$("#spins").val(n)
run(n)
});

$("#clean").click(function(){
$("#spins").val("")
});

$("#run").click(function(){
var n = GetUserNumbers();
run(n)
});





});
// ---------------------------------------------------------------
// --------------------- FUNCTIONS -------------------------------
// ---------------------------------------------------------------

function run(n)
{

$("#alert").text("")

// red
var checkRed = function(n){ if(color[n] == "red"){ return true; } else { return false; }}
var redWins = checkWins(n, checkRed)
var redLosses = checkLosses(n, checkRed)
if(redWins >= $("#evenwin").val()) { $("#alert").multiline("Red wins "+redWins+" times in a rows.\n")}
if(redLosses >= $("#evenloss").val()) { $("#alert").multiline("Red loses "+redLosses+" times in a rows.\n")}

// black
var checkBlack = function(n){ if(color[n] == "black"){ return true; } else { return false; }}
var blackWins = checkWins(n, checkBlack)
var blackLosses = checkLosses(n, checkBlack)
if(blackWins >= $("#evenwin").val()) { $("#alert").multiline("Black wins "+blackWins+" times in a rows.\n")}
if(blackLosses >= $("#evenloss").val()) { $("#alert").multiline("Black loses "+blackLosses+" times in a rows.\n")}

// even
var checkEven = function(n){ if(n%2 == 0 && n<37){ return true; } else { return false; }}
var evenWins = checkWins(n, checkEven)
var evenLosses = checkLosses(n, checkEven)
if(evenWins >= $("#evenwin").val()) { $("#alert").multiline("Even wins "+evenWins+" times in a rows.\n")}
if(evenLosses >= $("#evenloss").val()) { $("#alert").multiline("Even loses "+evenLosses+" times in a rows.\n")}

// odd
var checkOdd = function(n){ if(n%2 == 1 && n<37){ return true; } else { return false; }}
var oddWins = checkWins(n, checkOdd)
var oddLosses = checkLosses(n, checkOdd)
if(oddWins >= $("#evenwin").val()) { $("#alert").multiline("Odd wins "+oddWins+" times in a rows.\n")}
if(oddLosses >= $("#evenloss").val()) { $("#alert").multiline("Odd loses "+oddLosses+" times in a rows.\n")}

// high
var checkHigh = function(n){ if(n > 18 && n<37){ return true; } else { return false; }}
var highWins = checkWins(n, checkHigh)
var highLosses = checkLosses(n, checkHigh)
if(highWins >= $("#evenwin").val()) { $("#alert").multiline("High wins "+highWins+" times in a rows.\n")}
if(highLosses >= $("#evenloss").val()) { $("#alert").multiline("High loses "+highLosses+" times in a rows.\n")}

// low
var checkLow = function(n){ if(n < 19 && n>0){ return true; } else { return false; }}
var lowWins = checkWins(n, checkLow)
var lowLosses = checkLosses(n, checkLow)
if(lowWins >= $("#evenwin").val()) { $("#alert").multiline("Low wins "+lowWins+" times in a rows.\n")}
if(lowLosses >= $("#evenloss").val()) { $("#alert").multiline("Low loses "+lowLosses+" times in a rows.\n")}

// row1
var checkRow1 = function(n){ if(n%1 == 0){ return true; } else { return false; }}
var row1Wins = checkWins(n, checkRow1)
var row1Losses = checkLosses(n, checkRow1)
if(row1Wins >= $("#dozenwin").val()) { $("#alert").multiline("Row 1 wins "+row1Wins+" times in a rows.\n")}
if(row1Losses >= $("#dozenloss").val()) { $("#alert").multiline("Row 1 loses "+row1Losses+" times in a rows.\n")}

// row2
var checkRow2 = function(n){ if(n%3 == 0){ return true; } else { return false; }}
var row2Wins = checkWins(n, checkRow2)
var row2Losses = checkLosses(n, checkRow2)
if(row2Wins >= $("#dozenwin").val()) { $("#alert").multiline("Row 2 wins "+row2Wins+" times in a rows.\n")}
if(row2Losses >= $("#dozenloss").val()) { $("#alert").multiline("Row 2 loses "+row2Losses+" times in a rows.\n")}

// row3
var checkRow3 = function(n){ if(n%3 == 1){ return true; } else { return false; }}
var row3Wins = checkWins(n, checkRow3)
var row3Losses = checkLosses(n, checkRow3)
if(row3Wins >= $("#dozenwin").val()) { $("#alert").multiline("Row 3 wins "+row3Wins+" times in a rows.\n")}
if(row3Losses >= $("#dozenloss").val()) { $("#alert").multiline("Row 3 loses "+row3Losses+" times in a rows.\n")}

// doz1
var checkDoz1 = function(n){ if(n>=1 && n<=12){ return true; } else { return false; }}
var doz1Wins = checkWins(n, checkDoz1)
var doz1Losses = checkLosses(n, checkDoz1)
if(doz1Wins >= $("#dozenwin").val()) { $("#alert").multiline("Dozen 1 wins "+doz1Wins+" times in a rows.\n")}
if(doz1Losses >= $("#dozenloss").val()) { $("#alert").multiline("Dozen 1 loses "+doz1Losses+" times in a rows.\n")}

// doz2
var checkDoz2 = function(n){ if(n>=13 && n<=24){ return true; } else { return false; }}
var doz2Wins = checkWins(n, checkDoz2)
var doz2Losses = checkLosses(n, checkDoz2)
if(doz2Wins >= $("#dozenwin").val()) { $("#alert").multiline("Dozen 2 wins "+doz2Wins+" times in a rows.\n")}
if(doz2Losses >= $("#dozenloss").val()) { $("#alert").multiline("Dozen 2 loses "+doz2Losses+" times in a rows.\n")}

// doz3
var checkDoz3 = function(n){ if(n>=25 && n<=36){ return true; } else { return false; }}
var doz3Wins = checkWins(n, checkDoz3)
var doz3Losses = checkLosses(n, checkDoz3)
if(doz3Wins >= $("#dozenwin").val()) { $("#alert").multiline("Dozen 3 wins "+doz3Wins+" times in a rows.\n")}
if(doz3Losses >= $("#dozenloss").val()) { $("#alert").multiline("Dozen 3 loses "+doz3Losses+" times in a rows.\n")}

}

function checkWins(n, condition)
{
var wins = parseInt(0);
for(var i=0;i<n.length;i++)
{
if(condition(n[i]))
{
wins += 1
}
else
{
wins = 0
}
}

return wins
}

function checkLosses(n, condition)
{
var losses = parseInt(0);
for(var i=0;i<n.length;i++)
{
if(condition(n[i]))
{
losses = 0
}
else
{
losses += 1
}
}
return losses
}

$.fn.multiline = function(text){
this.text(this.text().replace('<br/>',/\n/g));
text = $("#alert").text()+"\n"+text
this.text(text);
this.html(this.html().replace(/\n/g,'<br/>'));
return this;
}


function getWheel()
{
if($("input[name=wheel]:checked").val()=="0")
{
wheel = wheel0
}
else
{
wheel = wheel00
}
color = GetColor(wheel)
}

function reset()
{
evenwins = parseInt(0);
}
function GetUserNumbers()
{
var n = $("#spins").val().split(",");

for(var x=0; x<n.length; x++)
{
if(n[x].trim() == "0")
{
n[x] = "37";
}
if(n[x].trim() == "00")
{
n[x] = "38";
}
n[x] = parseInt(n[x].trim());
}
return n;
}

function GetColor(wheel)
{
var color = Array();
if(wheel.length==37)
{
color[1] = "red";
color[2] = "black";
color[3] = "red";
color[4] = "black";
color[5] = "red";
color[6] = "black";
color[7] = "red";
color[8] = "black";
color[9] = "red";
color[10] = "black";
color[11] = "black";
color[12] = "red";
color[13] = "black";
color[14] = "red";
color[15] = "black";
color[16] = "red";
color[17] = "black";
color[18] = "red";
color[19] = "red";
color[20] = "black";
color[21] = "red";
color[22] = "black";
color[23] = "red";
color[24] = "black";
color[25] = "red";
color[26] = "black";
color[27] = "red";
color[28] = "black";
color[29] = "black";
color[30] = "red";
color[31] = "black";
color[32] = "red";
color[33] = "black";
color[34] = "red";
color[35] = "black";
color[36] = "red";
color[37] = "green";
}
if(wheel.length==38)
{
color[1] = "red";
color[2] = "black";
color[3] = "red";
color[4] = "black";
color[5] = "red";
color[6] = "black";
color[7] = "red";
color[8] = "black";
color[9] = "red";
color[10] = "black";
color[11] = "black";
color[12] = "red";
color[13] = "black";
color[14] = "red";
color[15] = "black";
color[16] = "red";
color[17] = "black";
color[18] = "red";
color[19] = "red";
color[20] = "black";
color[21] = "red";
color[22] = "black";
color[23] = "red";
color[24] = "black";
color[25] = "red";
color[26] = "black";
color[27] = "red";
color[28] = "black";
color[29] = "black";
color[30] = "red";
color[31] = "black";
color[32] = "red";
color[33] = "black";
color[34] = "red";
color[35] = "black";
color[36] = "red";
color[37] = "green";
color[38] = "green";
}
return color;
}

</script>
</head>
<body>
Toggle Displays</br><br/>
<div >
<button class="bntshow" id="enterSpins">Enter Spins</button><br/>
<button class="bntshow" id="setAlert">Set Alerts</button><br/>
<button class="bntshow" id="howTo">How To</button><br/>
<input type="radio" name="wheel" value="0">0 Wheel<br/>
<input type="radio" name="wheel" value="00" checked>00 Wheel<br/>
</div><br/>
<div id="alert"></div>
<hr>


<!-- Enter Spins -->
<span class="spanhide" id="divSpins">
<button class="bntcaladd" id="enterPad">Toggle Numberpad</button><br/>
<br/>

<span class="spanhide" id='showSpinsPad'>
<br/>
<button class="bntcal" id="calculator" value="0">0</button>
<button class="bntcal" id="calculator" value="00">00</button><br/>
<button class="bntcal" id="calculator" value="1">1</button>
<button class="bntcal" id="calculator" value="2">2</button>
<button class="bntcal" id="calculator" value="3">3</button><br/>
<button class="bntcal" id="calculator" value="4">4</button>
<button class="bntcal" id="calculator" value="5">5</button>
<button class="bntcal" id="calculator" value="6">6</button><br/>
<button class="bntcal" id="calculator" value="7">7</button>
<button class="bntcal" id="calculator" value="8">8</button>
<button class="bntcal" id="calculator" value="9">9</button><br/>
<button class="bntcaladd" id="clear">Clear</button>
<button class="bntcaladd" id="add">ADD</button><span id="currentSpin"></span>
<br/>
<button class="bntcaladd" id="undo">Undo</button><br/>
<span id="currentSpin"></span>
<br/>
</span>
<span id="clearBox">Enter roulette numbers separated by a comma</span><br/>
<textarea rows="10" cols="50" id="spins"></textarea><br/><br/>
<span id="clearBox1">
<button id="clean">Clear Box</button>
<button id="run">Run</button>
</span>

</span>

<!-- Set Alerts -->
<span class="spanhide" id="divAlerts">
<h2>Evens</h2>
<input type="text" id="evenwin" value="2"> Wins in a row<br>
<input type="text" id="evenloss" value="6"> Losses in a row<br>
<br><br>
<h2>Dozens</h2>
<input type="text" id="dozenwin" value="6"> Wins in a row<br>
<input type="text" id="dozenloss" value="6"> Losses in a row<br>
<br><br>

</span>

<!-- How To -->
<span class="spanhide" id="divHowTo">
How To
</span>


</body>
</html>

Ted Ted
Answer

Yes, absolutely!

In JavaScript, you are capable of saving functions to variables, and hence pass them around as parameters; this is one of the most powerful aspects of JavaScript. So for example, if you want to check if the color is red, you can write a condition test function that returns true/false as follows:

var checkColor = function(nElement){
      var color = color(nElement);
      if(color == 'red'){
          return true;
      }
      else if(color == 'black'){
           return false;
      }
 }

So now, you have a variable checkColor that is a function that checks if a color is red or not. Now, you can pass this function into your test function like this:

function test(n,testFunc)
{
var wins = parseInt(0);
var losses = parseInt(0);

for(var i=0;i<n.length;i++)
{
    if(testFunc(n[i])) //testFunc = checkColor in this case since we passed in checkColor
    {
        wins += 1 
        losses = 0
    }
    else
    {
        wins = 0
        losses += 1
    }

}

test(n,checkColor); //This is where you pass in checkColor as your test func

And so for example, if we wanted to add another test for an even, we could write a function as so:

var checkEven = function(nElement){
     if(nElement % 2 == 0){
           return true;
     }
     else{
           return false;
     }
 }

And we could simply run test using this new condition like:

test(n,checkEven);

And so from here, you should get the idea of how to create a test function and pass it into a universal test function. If you need clarification, don't hesitate to ask!