Как добавить условие if, else if, else в мою функцию стрелки, которая уже включает в себя .map и .filter? - PullRequest
3 голосов
/ 06 апреля 2020

Ниже приведена функция, которая должна установить значение option.value выбранного элемента в массиве параметров. Он должен установить его на $ 1,50 каждый, если выбрано 3 или более опций, а если выбрано 6 или более, то должно быть 1,00 каждый. Прямо сейчас он работает как шарм, поскольку он просто берет option.value из массива и устанавливает его в текущую цену, однако мне нужно добавить эту функцию скидок в мою функцию. Как мне этого добиться?

Моя текущая рабочая функция без условия скидки.

private getSelectedOptions(options) {
      return (options || []).filter(x => x.selected).map
         (option => ({ name: option.name, value: option.value || 0 }));
 }

Массив опций

 "options": [
    {
      "name": "Red Pepper",
      "selected": false,
      "value": 2.00
    },
    {
      "name": "Garlic",
      "selected": false,
       "value": 2.00

    },
    {
      "name": "Cheese blend",
      "selected": false,
       "value": 2.00
    },
     {
      "name": "pineapple",
      "selected": false,
       "value": 2.00
    },
     {
      "name": "bacon",
      "selected": false,
       "value": 2.00
    },
    {
      "name": "green pepper",
      "selected": false,

    }

Ответы [ 2 ]

3 голосов
/ 06 апреля 2020

Сначала сохраните сопоставленный массив в переменной, чтобы вы могли проверить length для определения необходимой цены:

private getSelectedOptions(options) {
  const selectedItems = (options || []).filter(x => x.selected);
  const price = selectedItems.length >= 6
    ? 1
    : selectedItems.length >= 3
      ? 1.5
      : 2;
  return selectedItems.map(
    option => ({ name: option.name, value: option.value ? price : 0 })
  );
 }

const getSelectedOptions = (options) => {
  const selectedItems = (options || []).filter(x => x.selected);
  const price = selectedItems.length >= 6
    ? 1
    : selectedItems.length >= 3
      ? 1.5
      : 2;
  return selectedItems.map(
    option => ({ name: option.name, value: option.value ? price : 0 })
  );
};
 
 const options = [
  {
    "name": "Red Pepper",
    "selected": true,
    "value": 2.00
  },
  {
    "name": "Garlic",
    "selected": true,
     "value": 2.00

  },
  {
    "name": "Cheese blend",
    "selected": true,
     "value": 2.00
  },
   {
    "name": "pineapple",
    "selected": false,
     "value": 2.00
  },
   {
    "name": "bacon",
    "selected": false,
     "value": 2.00
  },
  {
    "name": "green pepper",
    "selected": true,

  }
];

console.log(getSelectedOptions(options));

Если параметры могут иметь разные значения, определите коэффициент для их умножения, например 1 или 0.75 или 5:

const getSelectedOptions = (options) => {
  const selectedItems = (options || []).filter(x => x.selected);
  const factor = selectedItems.length >= 6
    ? 0.5
    : selectedItems.length >= 3
      ? 0.75
      : 1;
  return selectedItems.map(
    option => ({ name: option.name, value: option.value * factor })
  );
};
 
 const options = [
  {
    "name": "Red Pepper",
    "selected": true,
    "value": 5.00
  },
  {
    "name": "Garlic",
    "selected": true,
     "value": 2.00

  },
  {
    "name": "Cheese blend",
    "selected": true,
     "value": 2.00
  },
   {
    "name": "pineapple",
    "selected": false,
     "value": 2.00
  },
   {
    "name": "bacon",
    "selected": false,
     "value": 2.00
  },
  {
    "name": "green pepper",
    "selected": true,

  }
];

console.log(getSelectedOptions(options));
0 голосов
/ 06 апреля 2020

Функция стрелки - это обычная JavaScript функция, поэтому, если вы удалите «()» и просто поместите «{}» в функцию с телом, чтобы снова вернуть объект, return {}

...