Refactor Javascript ES6 - PullRequest
       4

Refactor Javascript ES6

0 голосов
/ 08 февраля 2020

Мне нужна помощь с рефакторингом ниже блока кода. Меня попросили избегать использования let и const, как я могу использовать константу здесь, так как мне нужно вернуть все опции с возможным идентификатором совпадения.

    const findRecordExists = (options, possibleMatchId) => {
  let item;
  options.forEach(option => {
    option.waivers.forEach(waiver => {
      if (waiver.waiverNameId === possibleMatchId) {
        item = option;
      }
    });
  });
  return item;
};

Примером параметров будет:

options: [{
  name:Abc
  waivers: [ {waiverNameId :1}, {waiverNameId:2} ]
}]

Ответы [ 3 ]

1 голос
/ 08 февраля 2020

Используйте filter для итерации по массиву options, возвращая .some из waiverNameId с совпадения:

const findRecordExists = (options, possibleMatchId) => {
  return options.filter(
    ({ waivers }) => waivers.some(
      ({ waiverNameId  }) => waiverNameId === possibleMatchId
    )
  );
};

Или, если вам не нравится деструктурирование:

const findRecordExists = (options, possibleMatchId) => {
  return options.filter(
    option => option.waivers.some(
      wavier => wavier.waiverNameId => waiverNameId === possibleMatchId
    )
  );
};

Поскольку результат немедленно возвращается из функции findRecordExists, нет даже необходимости в промежуточной переменной item (или items).

0 голосов
/ 08 февраля 2020

Вы можете изменить коэффициент с помощью метода find. Это упростит и позволит избежать переменной item.

const options = [
  {
    name: "Abc",
    waivers: [{ waiverNameId: 1 }, { waiverNameId: 2 }]
  }
];

const findRecordExists = (options, possibleMatchId) =>
  options.find(option =>
    option.waivers.find(waiver => waiver.waiverNameId === possibleMatchId)
  );

console.log(findRecordExists(options, 2));
console.log(findRecordExists(options, 3));
0 голосов
/ 08 февраля 2020

Это нормально.

Использование const для объявления идентификатора делает значение идентификатора неизменным, только если значение идентификатора является примитивом JavaScript, например, числом или логическим значением.

Если значение идентификатора является объектом или массивом (массив является типом объекта в JavaScript), использование const для объявления этого не означает, что значение этого идентификатора объекта не может быть изменений. Это означает только то, что идентификатор нельзя переназначить.

Для рефакторинга вашего кода с использованием const используйте приведенный ниже список кодов

const findRecordExists = (options, possibleMatchId) => {
  const optionsWithPossibleMatches = [];
  options.forEach(option => {
    option.waivers.forEach(waiver => {
      if (waiver.waiverNameId === possibleMatchId) {
        optionsWithPossibleMatches.push(option);
      }
    });
  });
  return optionsWithPossibleMatches;
};

Если вы хотите пропустить промежуточные шаги создания переменных для хранения каждого параметра, соответствующего вашему условию, вы можете использовать метод filter, как предписано @ CertainPerformance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...