Code Golfing in JavaScript

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();
    }
    
  • Golfed Code – I
    x == 3 ? "y" : "n";
    
  • Golfed Code – II
    x-3 ? "y" : "n";
    
  • Golfed Code – III
    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
    

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);
    
  • Golfed Code:
    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);
    
  • Golfed Code:
    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);
    
  • Golfed Code:
    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;
    }
    
  • Golfed Code:
    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);
    
  • Golfed Code:
    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);
    
  • Golfed Code:
    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)
    
  • Golfed Code:
    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);
    }
    
  • Golfed Code:
    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`*`)
    

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);
    }
    
  • Golfed Code:
    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
    

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)
    
  • Golfed Code:
    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
    

full-stack-img

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.