Здравствуйте ! Путаница в операторе if else функции addItem. Кто-нибудь может предложить более чистый код? - PullRequest
0 голосов
/ 14 марта 2019

Этот код показался мне немного сложным, но я запутался, главным образом, в части ifElse функции addItem. Я не могу понять оператор ifElse, в котором я передал функцию checkDuplicate в качестве условия, и понять параметры, переданные ей.

     let toDoList = [];

    function addItem(arr)
    {   
        let userAns = prompt('What will you do today ?');

        let formatted = userAns.toUpperCase();

        if(checkDuplicates(arr, formatted))   // Confusion started here
        {
            arr.push(formatted);
        }

        else
        {
            prompt('Item already exists');
        }

    }

    function checkDuplicates(arr1, arrElem)
    {
        let elemExists = false;

        let index = arr1.indexOf(arrElem);

        if(index === -1)
        {
            elemExists = true;
        }

        else
        {
            elemExists = false;
        }

        return elemExists;
    }

    addItem(toDoList);

    addItem(toDoList);

    addItem(toDoList);

    addItem(toDoList);

    console.log(toDoList);

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

checkDuplicates проверяет, содержит ли arr уже formatted, если да, возвращается false, если нет, возвращается true.В этом случае ветвь if выполняется, а formatted передается в arr.Поэтому он не будет добавлять дубликаты.


Sidenote: checkDuplicates не требуется, для этого есть встроенная функция:

 // read as "if arr not includes formatted"
 if(!arr.includes(formatted))
    arr.push(formatted);
0 голосов
/ 14 марта 2019
  • Вам не нужна функция checkDuplicates()
  • Не назначайте другую переменную formatted, просто примените .toUpperCase() к prompt(...)
  • вместо if-else используйте троичные операторы
  • Используйте цикл для вызова функции addItem
  • Используйте includes() вместо indexOf()

    let toDoList = [];

    function addItem(arr)
    {   
        let userAns = prompt('What will you do today ?').toUpperCase();
        !arr.includes(userAns) ? arr.push(userAns) :   prompt('Item already exists')
    }
    for(let i = 0;i<4;i++) addItem(toDoList);
    console.log(toDoList);
0 голосов
/ 14 марта 2019

Вызов пользовательской 11-строчной функции выглядит немного ненужным, когда вы можете добиться того же с помощью простого теста .includes (встроенная функция для проверки наличия в массиве элемента):

let toDoList = [];
function addItem(arr) {
  let userAns = prompt('What will you do today ?');
  let formatted = userAns.toUpperCase();
  if (!arr.includes(formatted))  {
    arr.push(formatted);
  } else {
    prompt('Item already exists');
  }
}

Это довольно очевидно - вызовите .includes для массива, на который вы хотите посмотреть, и передайте один аргумент - элемент, существование которого вы хотите проверить в этом массиве.

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