Любое конкретное c шаблонное предложение для деструктуризации параметров в функциях в ES6? - PullRequest
0 голосов
/ 07 апреля 2020

В моем приложении React я вызываю две функции в зависимости от типа владельца. Проблема в том, что порядок, в котором я вызываю параметры, может отличаться в зависимости от условия. В настоящее время я вызываю каждый параметр в зависимости от типа владельца.

Как мне сделать его более динамичным c? Есть ли шаблон, чтобы сделать его более читабельным? Может ли кто-нибудь помочь?

const getCarStats = async(
    type,
    model,
    color,
    weight,
    source,
    make,
    year,
    id,
    owner,
  ) => {
    if (owner === 'A') {
      await getAResult(
        weight,
        source,
        make,
        year,
        id,
        owner,
      );
    }
    if (owner === 'B') {
      await getBResult(
        type,
        model,
        color,
        weight,
        make,
        year,
        id,
        owner,
      );
    }

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Если бы вы могли определить две внутренние функции следующим образом:

const getAResult = async ({
  weight, source, make, year, id, owner
}) => {
  ...
};

const getBResult = async ({
  type, model, color, weight, make, year, id, owner
}) => {
  ...
};

Тогда внешняя функция может стать намного проще:

const getCarStats = async car => {
  if (car.owner === 'A') {
    await getAResult(car);
  }

  if (car.owner === 'B') {
    await getBResult(car);
  }
};

Здесь ожидается, что car быть объектом, содержащим свойства, имена которых соответствуют позиционным параметрам, которые есть в реализации вопроса.

0 голосов
/ 07 апреля 2020

Я бы не стал разделять все эти переменные, но просто передал бы объект car, который содержит все из них:

const getCarStats = async(car) => {
    if (owner === 'A') {
      return await getAResult(car);
    }

    if (owner === 'B') {
      return await getBResult(car);
    }
}

Затем в getAResult и getBResult вы можете деструктурирование объекта с использованием только интересующих вас предметов:

function async getAResult({
        weight,
        source,
        make,
        year,
        id
        // owner is omitted because you know is "A"
      }) {
...
}

Вы также можете выполнить деструктуризацию в теле функции.

0 голосов
/ 07 апреля 2020

Вы можете перемещать общие свойства в состоянии покоя.

const getCarStats = async(
  type,
  source,
  model,
  ...rest
) => {
  if (owner === 'A') {
    await getAResult(
      source,
      ...rest
    );
  }
  if (owner === 'B') {
    await getBResult(
      type,
      model,
      ...rest
    );
  }
}

// Другое

const getCarStats = async (
  type,
  source,
  model,
  color,
  weight,
  make,
  year,
  id,
  owner
) => {
  const otherParams = {
    color,
    weight,
    make,
    year,
    id,
    owner,
  };
  if (owner === "A") {
    await getAResult(weight, source, otherParams);
  }
  if (owner === "B") {
    await getBResult(type, model, otherParams);
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...