This article describes various methods of writing conditional formulas using JavaScript.
1. Mathematical operators and formulas
Requirements
- A JavaScript variable, rule or QScript.
- You have read JavaScript Fundamentals.
- The main condition operators are as follows:
Method
1. Mathematical operators and formulas
All the traditional mathematical operators (i.e., +, -, /, (, ), and *) work in JavaScript in the way that you would expect when performing math on variables:
(brandA + brandB + brandC) / daysInYear
All the standard mathematical functions are also available in JavaScript. For example:
-
Math.abs(x)
- Computes the absolute values of x (i.e. removes any negative sign). -
Math.floor(x)
– Rounds x down to the nearest whole number. -
Math.ceil(x)
– Rounds x up to the nearest whole number. -
Math.max(x)
– Finds the maximum value from x. -
Math.min(x)
– Finds the minimum value from x.
2. Boolean expression
A Boolean expression is an expression which evaluates to true or false. Results that are true are returned as values of 1 and false as 0 (i.e., this is a way to construct a binary variable).
For example, we have two numeric variables, v1 and v2, and a text variable, v3:
-
v1 != v2
returns a 1 for observations where v1 and v2 are different, and a value of 0 when they are the same. -
isNaN(v1)
returns a 1 for observations in v1 that have the value of NaN (missing data), otherwise it returns a 0. For text variables, usev1 == ""
-
(v1 + v2) > 0
returns a 1 if the sum of v1 and v2 is greater than 0, otherwise it returns a 0. - The below formula returns a 1 if v3 contains an @ character, otherwise it returns a 0. The indexOf function finds the position of the specified string, whereby -1 is equivalent to being missing and 0 means it is the first character. Note, we have to first define v1 in order to append the indexOf function to it:
var v = v3;
v.indexOf("@")>-1
3. Using if...else
The if then else structure is one of the most common methods for writing conditions in programming languages. The following are examples of how this can be used in Displayr.
Banding variables
Let's say we have a variable called sumCola that sums the number of cola drinks each respondent in our survey drank. We want to now split these respondents into segments based on their frequency. One option is to set up a numeric JavaScript variable that assigns a 1 for less than 5 drinks (Light Drinker), a 2 for 5 to 10 drinks (Medium Drinker), and a 3 for 10 or more (Heavy Drinker):
if (sumCola < 5) 1;
else if (sumCola >= 5 && sumCola <= 10) 2;
else if (sumCola > 10) 3;
else NaN;
We would then need to change Properties > Structure to Nominal and assign our segment labels via DATA VALUES > Labels.
Alternatively, you can create a text variable via JavaScript which instead returns the text response. Changing Properties > Structure to Nominal will let Displayr automatically set up the value labels when it converts to a categorical variable.
The same example would look like this:
if (sumCola < 5) "Light Drinker"; else if (sumCola >= 5 && sumCola <= 10) "Medium Drinker"; else if (sumCola > 10) "Heavy Drinker"; else "";
Combining variables
Consider a situation where we’ve collected data for four countries: UK, France, Australia, and Japan. The data for each country was held in 4 separate data files and merged into a final file. Membership to a particular segment (market) is defined by a variable called country
. Each country’s data file had a specific weighting variable, so we now have four different weighting variables in the merged data file (weight_UK
, weight_FR
, weight_AU
, weight_JP
). When we do our analysis, we only want to deal with one weighting variable. So let’s combine them using JavaScript:
if (country == 1) weight_UK; else if (country == 2) weight_FR; else if (country == 3) weight_AU; else if (country == 4) weight_JP; else NaN;
4. The if...else shortcut
There is also a shortcut method of if...else that lets you write a condition in a single line. In the below example, the formula will return a Yes if x is greater than 1, otherwise a No:
x > 1 ? "Yes" : "No";
See Also
How to Use JavaScript in Displayr
How to Work with JavaScript Arrays and Loops
How to Manipulate Strings Using JavaScript
How to Troubleshoot JavaScript Code in Displayr