Как передать динамическое количество аргументов в функцию

Я стараюсь приводить разное количество аргументов в разных случаях. У меня такой код:

function getByteCode(tokenData, incomeData){

        incomeData.volume = Number(incomeData.volume) * Math.pow(10,tokenData.decimals);
        incomeData.volume = incomeData.volume.noExponents();
        let web3 = new Web3();
        let instanceContract = new web3.eth.Contract(abi);
        instanceContract.options.address = tokenData.address;
        let necessaryMethod = instanceContract.methods[incomeData.methodCall];
        let methodCall = necessaryMethod(incomeData.destination_address, incomeData.volume);
        return methodCall.encodeABI();
    } catch (err) {
        sails.log(err);
        return {
            state: 'fail',
            message: 'There is error in creation byte code \n' + err
        }
    } 
}

В необходимый метод я хочу передать два аргумента в одном случае и передать три или более аргумента в другом случае. Как я могу это сделать? Может стоит использовать "аргументы", но не понимаю как?

Вы можете поместить аргументы в массив, а затем использовать .apply()

Pointy 26.10.2018 16:20

Из кода неясно, что это за «один случай» и «другой случай».

Estus Flask 26.10.2018 16:46

@Pointy не нужно использовать .apply, оператор спреда добьется того же и будет более четким. requiredMethod (... массив)

sofcal 26.10.2018 18:03

@sofcal Я олдскульный :) Тоже ... не оператор.

Pointy 26.10.2018 18:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, спасибо за помощь. Я использовал метод .apply ()

let web3 = new Web3();
let instanceContract = new web3.eth.Contract(abi);
instanceContract.options.address = tokenData.address;
let necessaryMethod = instanceContract.methods[incomeData.methodCall];

let methodCall = necessaryMethod.apply(this, incomeData.argumentsForFunction); 

return methodCall.encodeABI();

В первом случае я вызвал функцию getByteCode (firstObj, доходДанные), и следующий массив есть в yieldData.argumentsForFunction = ['0x323 .....', '1500000000'].

В другом случае я вызвал функцию getByteCode (firstObj, доходДанные) с yieldData.argumentsForFunction = ['0x323 .....', '0x3228 ....', '54454000000']

Другие вопросы по теме