Подсчет результатов в массиве JavaScript

#javascript

#javascript

Вопрос:

Как вы подсчитываете результаты в массиве?

Я подсчитываю вхождения шаблона в массиве и хотел бы, чтобы он возвращался как

 [0, 0, 0]
  

Например, каждый элемент массива представляет результат поиска.

Это то, что я делал до сих пор… но, похоже, он возвращает только [object object] …

 pages=[
"Lorem Ipsum is simply dummy text of the printing and typesetting industry."
, 
"It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout", 
"There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." 
]
pattern = prompt("Enter a search string")

    var count = {};

    for(i=0; i<pages.length; i  )
    {
         for(j=0; j<pattern.length; j  )
         {
               if((pages[i].toLowerCase()
                           .indexOf(pattern.toLowerCase()
                                           .charAt([j])))<0)
               {
                  count[i]  ;
               }
         }
    }

    alert(count);
  

Комментарии:

1. Ну, это потому, что это объект. Перенаправьте его на консоль, чтобы просмотреть его содержимое: console.dir( count );

2. Почему вы перебираете каждый символ или строку поиска? Разве вы не хотите просто выполнить поиск по всему шаблону?

3. Да, я знаю, и я подумал, что это решение будет работать лучше всего!

4. Есть ли какой-либо способ, которым я могу это улучшить?

5. Я не уверен, чего вы пытаетесь достичь. Не могли бы вы обновить свой вопрос примером (страницы строка поиска ожидаемый результат)?

Ответ №1:

 var count, allCounts = [];

for(i=0; i<pages.length; i  )
{
     count = 0;
     for(j=0; j<pattern.length; j  )
     {
           if((pages[i].toLowerCase()
                       .indexOf(pattern.toLowerCase()
                                       .charAt([j])))<0)
           {
              count  ;
           }
     }
     allCounts.push(count);
}
alert('['   allCounts.join(', ')   ']');
  

Я предлагаю вам .Введите в нижний регистр ваш шаблон один раз перед началом любого из циклов, что позволит избежать выполнения операции ввода в нижний регистр i * j раз.

Ответ №2:

Я думаю, вам нужно переместить оповещение (количество) на 2 строки, чтобы оно было таким:

 var count = {};

           for(i=0;i<pages.length;i  )
           {
               for(j=0;j<pattern.length;j  )
                   {
                       if((pages[i].toLowerCase().indexOf(pattern.toLowerCase().charAt([j])))<0)
                       {
                           count[i]  ;
                       }
                   }
            alert(count[i]); // but note that it will appear multiple times
           }
  

Комментарии:

1. Оповещение в цикле — звучит забавно. Консоль, пожалуйста.