Open In App
Related Articles

How to get the javascript function parameter names/values dynamically ?

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

In this article, we are given any arbitrary JavaScript function and the task is to return the parameter names of the function. 

Approach: JavaScript contains a method called toString() which is used to represent a function code in its string representation. This method is used to get the parameter names/values. 

  • First, get the function’s code to its string equivalent using toString() method.
  • Then remove all the unnecessary codes like comments, function body, white spaces, and ES6 arrow (if any).
  • Identify the first occurrence of ‘(‘, it will be just before the starting of parameters.
  • The last character of the string will be ‘)’ which removes all comments, function body, white spaces, and ES6 arrow.
  • Also, the last character will be just after the end of the parameters.

Example: This example explains the above-explained approach.

Javascript

// JavaScript program to get the function
// name/values dynamically
function getParams(func) {
 
    // String representation of the function code
    let str = func.toString();
 
    // Remove comments of the form /* ... */
    // Removing comments of the form //
    // Remove body of the function { ... }
    // removing '=>' if func is arrow function
    str = str.replace(/\/\*[\s\S]*?\*\//g, '')
        .replace(/\/\/(.)*/g, '')
        .replace(/{[\s\S]*}/, '')
        .replace(/=>/g, '')
        .trim();
 
    // Start parameter names after first '('
    let start = str.indexOf("(") + 1;
 
    // End parameter names is just before last ')'
    let end = str.length - 1;
 
    let result = str.substring(start, end).split(", ");
 
    let params = [];
 
    result.forEach(element => {
 
        // Removing any default value
        element = element.replace(/=[\s\S]*/g, '').trim();
 
        if (element.length > 0)
            params.push(element);
    });
 
    return params;
}
 
// Test sample functions
let fun1 = function (a) { };
 
function fun2(a = 5 * 6 / 3,
b) { };
 
let fun3 = (a, /*
        */
    b, //comment
    c) => /** */ { };
 
console.log(`List of parameters of ${fun1.name}:`,
    getParams(fun1));
console.log(`List of parameters of ${fun2.name}:`,
    getParams(fun2));
console.log(`List of parameters of ${fun3.name}:`,
    getParams(fun3));

                    

Output
List of parameters of fun1: [ 'a' ]
List of parameters of fun2: [ 'a', 'b' ]
List of parameters of fun3: [ 'a', 'b', 'c' ]


Last Updated : 17 Jul, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads