JavaScript уменьшить с помощью троичного оператора - PullRequest
0 голосов
/ 27 июня 2019

У меня есть кусок кода, который просто работает. Этот код ищет наибольшее значение в массиве чисел. Может ли кто-нибудь перевести это на простой JavaScript (без троичного кода), чтобы начинающий программист мог это понять?

  const mostVotes = votes.reduce((bestIndex, v, i, arr) => v > arr[bestIndex] ? i : bestIndex, 0);

Сначала я пытался реализовать Math.max, но мне был нужен индекс наибольшего значения в массиве, поэтому я пошел за редукцией и это то, что я пытался сделать с этим.

const mostVotes = votes.reduce((acc, value, i, arr) => {
  if(value > acc) {
    return i
  }
}, 0)

Спасибо за ответы, высоко ценится! Я начинаю понимать это, и теперь это стало намного понятнее. Javascript Reduce и троичный вместе - хорошая подгонка.

Ответы [ 3 ]

1 голос
/ 27 июня 2019

По сути, предоставленный вами код циклически проходит по каждому элементу в votes и проверяет, больше ли он, чем элемент, сохраненный по определенному индексу.Этот индекс хранится в переменной bestIndex и используется для пометки / отслеживания индекса, который содержит самый большой элемент из всех элементов, видимых при цикле.

В вашем примере ваша троица проверяет, больше ли заданный элемент, чем отмеченный в данный момент самый большой элемент (выполняя v > arr[bestIndex]).Если это так, то мы устанавливаем индекс текущего элемента как новую позицию самого большого элемента (неявно возвращая i).Если это не так, мы оставляем индекс самого большого элемента как есть, неявно возвращая bestIndex.

. Вы можете перевести это в более процедурный стиль программирования, используя циклы for и операторы if.вот так:

let votes = [-4, 10, 100, -3, 40];

let positionOfMax = 0;
for(let i = 0; i < votes.length; i++) {
  if(votes[i] > votes[positionOfMax]) {  // v > arr[bestIndex]
    positionOfMax = i; // ? i (from ternary)
  }
  /* Not needed
    else {posittionOfMax = positionOfMax} // : bestIndex (from ternary)
  */
}
console.log(positionOfMax);

Я рекомендую вам взглянуть на .reduce() и документацию по условному (троичному) оператору .Это полезные и мощные инструменты, которые могут помочь ускорить вашу разработку.

0 голосов
/ 27 июня 2019

Ниже if/else должен привести вас туда, где вы хотите быть.

if (v > arr[bestIndex]) {
  return i
} else {
  return bestIndex
}

0 голосов
/ 27 июня 2019

Что могло бы сбить с толку в исходном коде, так это отсутствие скобок {}.

() => 'test' совпадает с () => { return 'test' }

В вашем случае:

(bestIndex, v, i, arr) => v > arr[bestIndex] ? i : bestIndex

(bestIndex, v, i, arr) => {
  return (v > arr[bestIndex] ? i : bestIndex)
}

(bestIndex, v, i, arr) => {
  if(v > arr[bestIndex])
    return i
  else 
    return bestIndex
}

const mostVotes = votes.reduce((bestIndex, v, i, arr) => {
  if(v > arr[bestIndex])
    return i
  else 
    return bestIndex
}, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...