Code Golfing in JavaScript - GeeksforGeeks

29 Jan, 2020
Code Golf in JavaScript refers to attempting a problem to solve using the least amount of characters possible. Like in Golf, the low score wins, the fewest amount of characters “wins”. JavaScript is a fantastic language for code golfing due to backward compatibility, quirks, it is being a high-level language, and all the coercion. So, here we will look at some Code Golfing techniques in JavaScript language:1. Checks if a variable is equal to some positive no: We can simply do this with a bunch of if-else statements, but we have different methods also like subtracting that positive integer from the number and checks whether it is greater than zero or not.
Original Code:if(a == 5){
    yes();
}else{
    no();
}

if(a == 5){
    yes();
}else{
    no();
}

Golfed Code – Ix == 3 ? "y" : "n";

x == 3 ? "y" : "n";

Golfed Code – IIx-3 ? "y" : "n";

x-3 ? "y" : "n";

Golfed Code – IIIx^3 ? "y" : "n";

x^3 ? "y" : "n";

2. Checking the case of literals: We can even compare the literal with {} for checking its case, it returns true for the uppercase and false for the lowercase.
Golfed Code:'g' < {}     // Returns false, lower case
'G' < {}     // Returns true, upper case

'g' < {}     // Returns false, lower case
'G' < {}     // Returns true, upper case

3. Floor the value: A straight forward solution is used in floor function present in the Math library but it takes little more characters. We can do the same in a few characters by using the | operator.
Original Code:a = Math.floor(a);

a = Math.floor(a);

Golfed Code:a = 0 | a;

a = 0 | a;

4. Ceil value: A straight forward solution is to use ceil function present in the Math library but it takes little more characters. We can do the same in a few characters by using the combination of %, ~ operator.
Original Code:a = Math.ceil(a);

a = Math.ceil(a);

Golfed Code:a = a%1 ? -~a : a;

a = a%1 ? -~a : a;

5. Rounding the value: A straight forward solution is used to round function present in the Math library but it takes little more characters. We can do the same in a few characters by using the combination of |, + operator.
Original Code:a = Math.round(a);

a = Math.round(a);

Golfed Code:a = 0 | a + .5;

a = 0 | a + .5;

6. Arrow functions: Arrow functions provides a concise way to write functions in the JavaScript.
Original Code:g = function (a) {
   return a * a * a;
}

g = function (a) {
   return a * a * a;
}

Golfed Code:g = a => a*a*a;

g = a => a*a*a;

7. Alternatives for min function: Ternary operator always saves bytes. We can compare two numbers using the ternary operator.
Original Code:Math.min(x, y);

Math.min(x, y);

Golfed Code:a < b ? a : b

a < b ? a : b

8. Alternatives for max function: Ternary operator always saves bytes. We can compare two numbers using the ternary operator.
Original Code:Math.max(x, y);

Math.max(x, y);

Golfed Code:a < b ? b : a

a < b ? b : a

9. Absolute value: A straight forward solution is to use absolute function present in the Math library but it takes little more characters. We can do the same in a few characters by using the ternary operator.
Original Code:Math.abs(x)

Math.abs(x)

Golfed Code:x < 0 ? -x : x

x < 0 ? -x : x

10. Save bytes in Loops: We can save bytes by changing the variable on the last time used.
Original Code:for(x = 0; x < 10; x++){
  alert(x);
}

for(x = 0; x < 10; x++){
  alert(x);
}

Golfed Code:for(x = 0; x < 3 ; ){
  alert(x++);
}

for(x = 0; x < 3 ; ){
  alert(x++);
}

11. Calculating Sum or Product of Array: We have the option to do task by iterating the loop but for saving bytes we can use eval and arithmetic operators like +, *, ^etc.
Golfed Code:eval(a.join('+'))
eval(a.join`+`)

eval(a.join('*'))
eval(a.join`*`)

eval(a.join('+'))
eval(a.join`+`)

eval(a.join('*'))
eval(a.join`*`)

12. Check for NaN: NaN method in JavaScript is used to determines whether the passed value is NaN(Not a Number) and is of the type “Number”.
Original Code:if(isNaN(x)){
    alert(x);
}

if(isNaN(x)){
    alert(x);
}

Golfed Code:if(x != x){
    alert(x);
}

if(x != x){
    alert(x);
}

Note: It only works if typeof(x) == “number”
13. for vs while loops: Both loops are efficient in terms of time complexity but when it comes to space complexity, many times for loop outbeats while loop.
Golfed Code:i = 10;
while(i--);    # While loop

for(i = 10; i--; );     # For loop

i = 10;
while(i--);    # While loop

for(i = 10; i--; );     # For loop

14. Combining Nested loops into a single loop: We can combine the nested loop of 2 or more degree into a single loop.
Original Code:for(i = 10; i--; )
    for(j = 5; j--; )
        do_something(i, j)

for(i = 10; i--; )
    for(j = 5; j--; )
        do_something(i, j)

Golfed Code:for(i = 50; i--; )
    do_something(0 | i/5, i%5)

for(i = 50; i--; )
    do_something(0 | i/5, i%5)

15. Generating Random numbers between the range: We can use the Date class to generate the random number because the Date is stored internally in JavaScript as the number of milliseconds since an epoch.
Golfed Code:new Date%1500   // Random integer 0 <= x < 1500

new Date%1500   // Random integer 0 <= x < 1500

JavaScript-Misc
Technical Scripter 2019
JavaScript
Technical Scripter
Web Technologies
Web technologies Questions
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Difference between var, let and const keywords in JavaScript
Difference Between PUT and PATCH Request
How to get character array from string in JavaScript?
How to get selected value in dropdown list using JavaScript ?
How to remove duplicate elements from JavaScript Array ?
Roadmap to Become a Web Developer in 2022
Installation of Node.js on Linux
How to fetch data from an API in ReactJS ?
Top 10 Projects For Beginners To Practice HTML and CSS Skills
How to insert spaces/tabs in text using HTML/CSS?