Для оператора, чтобы перебрать массив и элементы массива для новых массивов на основе распознавания образов. - PullRequest
0 голосов
/ 27 марта 2019

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

Ваша задача - перебрать этот массив и поместить элементы со сходством в четыре новых массива с помощью регулярных выражений и метода Array.push ():

  • один с именем og для элементов, которые заканчиваются на og и имеют длину 3 буквы или менее
  • один с именем at для элементов, которые заканчиваются на at, которые длиннее 3 букв
  • один с именем numberFirst для элементов, начинающихся с цифр
  • один с именем numberLast для элементов, заканчивающихся цифрами

Для моих операторов if и else if я проверяю, соответствует ли элемент выражению, которое я создал сверху. Если это совпадение, оно оценивается как истинное. Я считаю, что мои операторы if неверны или как я создал свои регулярные выражения для распознавания образов.

var mainList = ['catalog', 'dog', 'cat', 'hog', 'muskrat', 'World War 3', 'blog', 'frog', '25th of March', 'bat', 'log', 'March 25', 'slog', '10 Downing street', 'flat', 'fat', 'splat', 'blat', 'frat', 'rat', '23 Skidoo', 'Catch 22', '10 4 Good Buddy', 'fog'];
var re = /$og/; //one named 'og' for items that end with 'og' and are 3 letters long or less//
var re2 = /$at/; //one named 'at' for items that end with 'at' that are longer than 3 letters//
var re3 = /[^0-9]/; //one named 'numberFirst' for items that start with numbers//
var re4 = /$[0-9]/; //one named 'numberLast' for items that end with numbers
var arrayOG = [];
var arrayAT = [];
var arrayNumberFirst = [];
var arrayNumberLast = [];

function loop(item) {
  for (var i = 0; i < mainList.length; i++) {
    if (re.test(item) == true && item.length <= 3) {
      arrayOG.push(item);
      console.log(arrayOG);
    } else if (re2.test(item) == true && item.length > 3) {
      arrayAT.push(item);
      console.log(arrayAT);
    } else if (re3.test(item) == true) {
      arrayNumberFirst.push(item);
      console.log(arrayNumberFirst);
    } else if (re4.test(item) == true) {
      arrayNumberLast.push(item);
      console.log(arrayNumberLast);
    }
  }
}
loop();

1 Ответ

1 голос
/ 27 марта 2019

Вы объявляете item как параметр функции в определении функции
function loop(item) {
но позже при вызове функции loop() вы на самом деле ничего не пропускаете.
элемент тогда не определен для каждого изменения цикла.
вместо

function loop(item) {
  for (var i = 0; i < mainList.length; i++) {
    ...
  }
}

вы должны попробовать

function loop() {
  for (var i = 0; i < mainList.length; i++) {
    const item = mainList[i];
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...