Непонимание цикла подсчета строк в JavaScript - PullRequest
0 голосов
/ 05 февраля 2019

У меня проблемы с основной задачей.Мне нужно написать программу на JavaScript, которая содержит массив из как минимум пяти строк, проходит через массив и вызывает функцию для каждого элемента;эта функция должна проверять длину строки:

  • Если длина строки меньше четырех символов, выведите фразу «Менее четырех»
  • Если равно четырем символам,print «Ровно четыре»
  • Если длиннее четырех, выведите «More Than Four»

Я пробовал очень много вещей, но чувствую, что смотрю не в те места.Я понимаю, что это просто, но я не могу обернуть голову вокруг этого ...

Мой код прямо сейчас:

var colors = ["teal", "violet", "silver", "green", "red", "purple"];
var count;

for (count = 0; count < colors.length; count++) {
  console.log(colors[count]);
}

if (colors > 4) {
  console.log("greater than 4");
}

if (colors < 4) {
  console.log("less than 4");
}

if (colors = 4) {
  console.log("is equal to 4");
}

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

Массивы имеют встроенные методы зацикливания, которые позволяют выполнять функцию обратного вызова при каждой итерации цикла.В вашем сценарии, поскольку вам просто нужно изучить строку, метод .forEach(), вероятно, является наиболее подходящим.

В функции вам нужен только простой оператор if/then/elseопределить, какое сообщение печатать.

var colors = ["teal", "violet", "silver", "green", "red", "purple"];

colors.forEach(function(color){
  if(color.length < 4){
    console.log(color + " has less than 4 characters.");
  } else if (color.length === 4) {
    console.log(color + " has 4 characters.");  
  } else {
    console.log(color + " has more than 4 characters.");  
  } 
});
0 голосов
/ 05 февраля 2019

Новые версии JavaScript поддерживают for..of синтаксис

const colors =
  [ "teal", "violet", "silver", "green", "red", "purple" ]
  
for (const c of colors)
{ if (c.length > 4)
    console.log(c, "greater than 4")
  else if (c.length < 4)
    console.log(c, "less than 4")
  else
    console.log(c, "equal to 4")
}

// teal equal to 4
// violet greater than 4
// silver greater than 4
// green greater than 4
// red less than 4
// purple greater than 4

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

const colors =
  [ "teal", "violet", "silver", "green", "red", "purple" ]
  
const checkLength = str =>
{ if (str.length > 4)
    return "greater than 4"
  else if (str.length < 4)
    return "less than 4"
  else
    return "equal to 4"
}

for (const c of colors)
  console.log(c, checkLength(c))

// teal equal to 4
// violet greater than 4
// silver greater than 4
// green greater than 4
// red less than 4
// purple greater than 4

JavaScript - это мультипарадигмальный язык , поэтому он поддерживает написание одной и той же программы в самых разных стилях -

const colors =
  [ "teal", "violet", "silver", "green", "red", "purple" ]

const checkLength = str =>
{ if (str.length > 4)
    console.log(`${str} is greater than 4`)
  else if (str.length < 4)
    console.log(`${str} is less than 4`)
  else
    console.log(`${str} is equal to 4`)
}

colors.forEach(checkLength)

// teal equal to 4
// violet greater than 4
// silver greater than 4
// green greater than 4
// red less than 4
// purple greater than 4

Поддержка JavaScript для выражений также довольно хороша, устраняя необходимость в ключевых словах императивного стиля, таких как if, else, switch, for, while, do и даже return -

const colors =
  [ "teal", "violet", "silver", "green", "red", "purple" ]

const checkLength = x =>
  x.length > 4                   // if ...
    ? `${x} is greater than 4`
: x.length < 4                   // else if ...
    ? `${x} is less than 4`
: `${x} is equal to 4`           // else

console.log(colors.map(checkLength))

// [ "teal is equal to 4"
// , "violet is greater than 4"
// , "silver is greater than 4"
// , "green is greater than 4"
// , "red is less than 4"
// , "purple is greater than 4"
// ]
0 голосов
/ 05 февраля 2019

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

Более идиоматический способ выполненияв настоящее время вы пытаетесь реализовать логику в теле функции forEach, которая является частью прототипа объекта Array

var colors = ["teal", "violet", "silver", "green", "red", "purple"];

colors.forEach(function(currentColorToCheck) { //currentColorToCheck is a temporary variable that the forEach function gives you (1 for every item of colors Array)
  if (currentColorToCheck.length > 4) { // we use the .length function (part of String prototype and Array prototype) to get the length of the string
    console.log("greater than 4");
  }

  if (currentColorToCheck.length < 4) {
    console.log("less than 4");
  }

  if (currentColorToCheck.length === 4) { // here for an equality comparison, use === instead of =
    console.log("is equal to 4");
  }
})

ForEach - более удобный способвыразить "Перебирать значения массива".Вы можете посмотреть документацию для получения дальнейших рекомендаций.

В качестве описания, есть тонны прототипных (встроенных) функций для каждого типа JavaScript (Object, Array, String, Number, Date, Math и т. Д.), КоторыеВы можете учиться в свободное время. Сеть разработчиков Mozilla располагает большими ресурсами для этого.

0 голосов
/ 05 февраля 2019

Вызовите функцию для каждого элемента и проверьте длину внутри блока if-else

var colors = ["teal", "violet", "silver", "green", "red", "purple"];
var count;

for (count = 0; count < colors.length; count++) {
  console.log(colors[count]);
  stringLength(colors[count]);
}

function stringLength(string) {
  if (string.length > 4) {
    console.log("greater than 4");
  } else if (string.length < 4) {
    console.log("less than 4");
  } else {
    console.log("is equal to 4");
  }
}
...