Как улучшить эту функцию в Javascript, которая будет принимать любое количество аргументов? - PullRequest
1 голос
/ 19 июня 2020

Я хочу улучшить эту функцию. У меня есть 6 типов функций, при этом их работа почти такая же, только переданный параметр и глобальные значения разные. Вот почему я не нашел никаких способов улучшить это, и они слишком избыточны. это мой код:

var $param1 = $(document).find('select#param1');
var $param2 = $(document).find('select#param2');
var $arg1 = $(document).find('select#arg1');
var $arg2 = $(document).find('select#arg2');
var $arg3 = $(document).find('select#arg3');

function paramValueSet(p1, p2) {

    $param1.val(p1);
    $param2.val(p2);
    $(".selectpicker").selectpicker("refresh");
}


function argValueSet(a1, a2, a3) {

    $arg1.val(a1);
    $arg2.val(a2);
    $arg3.val(a3);
    $(".selectpicker").selectpicker("refresh");
}

По их структуре видно, что они почти схожи. Есть ли способ записать их всего в одной функции? Я знаю, что мы можем использовать здесь оператор распространения или подсчет аргументов, но поскольку внутренняя работа отличается от выбора точного ввода, поэтому я сталкиваюсь с проблемами, чтобы решить эту проблему. И иногда количество параметров может быть восемь / девять , поэтому отправка

будет повторяться.

Ответы [ 3 ]

3 голосов
/ 19 июня 2020

Это должно сработать:

var params = [
    $(document).find('select#param1'),
    $(document).find('select#param2'),
];

var args = [
    $(document).find('select#arg1'),
    $(document).find('select#arg2'),
    $(document).find('select#arg3')
];

function setValue(targets, values) {
    targets.forEach((e, index) => e.val(values[index]));
    $(".selectpicker").selectpicker("refresh");
}

const values = [p1, p2];
setValue(params, values);

const values = [a1, a2, a3];
setValue(params, values);
1 голос
/ 19 июня 2020

Вот простой пример, как это можно сделать.

const one = $(document).find('#one');
const two = $(document).find('#two');
const three = $(document).find('#three');
const four = $(document).find('#four');
const five = $(document).find('#five');

function setValues(elements, values) {
  elements.forEach((e, i) => e.val(values[i]));
}

setValues([one, two], [2, 3]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<select id="one">
  <option>1</option>
  <option>2</option>
</select>
<select id="two">
  <option>2</option>
  <option>3</option>
</select>
<select id="three">
  <option>3</option>
</select>
<select id="four">
  <option>4</option>
</select>
<select id="five">
  <option>5</option>
</select>
1 голос
/ 19 июня 2020

Создайте такую ​​же функцию, которая принимает массив объектов и изменяет каждое значение.

function setValues(objects){
   objects.forEach(({variable, newValue}) => variable.val(newValue));
   $(".selectpicker").selectpicker("refresh");
}

Для первой функции вызовите метод, как показано ниже

setValues([
              {variable: $param1, value: "param1"},
              {variable: $param2, value: "param2"}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...