Add parameters dynamically in a Javascript function

Asked

Viewed 253 times

0

You guys, it’s okay?

I am trying to create a function (I will call to execute) that takes as parameter another function (I will call word), a list of objects and a list of attributes to be accessed in the list objects.

This "run" function will execute the function it receives as parameter, but since I don’t know what parameters I should pass in the function I receive in "run", I want a generic way to pass the parameters...

Follow the example code:

//Lista com os parametros que quero pegar do objeto
  var listKeyParam = ["nome", "idade", "altura"];

  //Lista de objetos
  var objs = [
    { nome: "Anderson", idade: "21", altura: "1.85" },
    { nome: "Ranger", idade: "18", altura: "1.85" },
    { nome: "Renan", idade: "21", altura: "1.85" },
    { nome: "Guto", idade: "70", altura: "2.15" }
  ];

  //Funcao generica testar o recebimento dos parametros
  function palavra(nome,idade,altura) {
    console.log("nome => ",nome);
    console.log("idade => ",idade);
    console.log("altura => ", altura);
  }

  //Funcao que deve receber uma funcao como parametro, 
  //uma lista de objetos e a lista com os atributos que devem ser pegos dos objetos
  function executar(funcao, objs, listKeyParam) {

    objs.forEach((item, index) => {
      let argumentsFunc =[]
      $.each(item,(paramKey,paramValue) => {
        if(listKeyParam.includes(paramKey)) argumentsFunc.push(paramValue);
      });
      funcao(arguments = argumentsFunc);
    });


  }

  //Executando funcao
  executar(palavra, objs , listKeyParam);

1 answer

0


as I do not know the context of your project I just changed a little its code to pass the parameters in a generic way, as you mentioned. Basically for each item the Array objs i search the properties within the item that are in the array listKeyParam and create an array with these values that are stored in the variable argumentos. Then I use the Perator spread to pass them as parameter:

//Lista com os parametros que quero pegar do objeto
var listKeyParam = ["nome", "idade", "altura"];

  //Lista de objetos
var objs = [
  { nome: "Anderson", idade: "21", altura: "1.85" },
  { nome: "Ranger", idade: "18", altura: "1.85" },
  { nome: "Renan", idade: "21", altura: "1.85" },
  { nome: "Guto", idade: "70", altura: "2.15" }
];

// Funcao generica testar o recebimento dos parametros
function palavra(nome, idade, altura) {
  console.log("nome => ", nome);
  console.log("idade => ", idade);
  console.log("altura => ", altura);
}

// Funcao que deve receber uma funcao como parametro, 
// uma lista de objetos e a lista com os atributos que devem ser pegos dos objetos
function executar(funcao, objs, listKeyParam) {
  objs.forEach(item => {
    const argumentos = listKeyParam
      .filter(key => !!item[key])
      .map(key => item[key]);
      
    funcao(...argumentos);
  });
}

// Executando funcao
executar(palavra, objs , listKeyParam);

I hope it helps you ;)

  • Man, thank you so much! That’s exactly what I’ve been wanting to say/

  • @Andersonduarte thank you very much, vlw ;)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.