Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.06.2014, 23:37
Новичок на форуме
Отправить личное сообщение для yloboda Посмотреть профиль Найти все сообщения от yloboda
 
Регистрация: 21.05.2013
Сообщений: 4

Подскажите как сравнить первые элементы многомерного массива?
Мне необходимо посчитать одинаковые url и вывести те, которых больше всего.
пример лог файла:
85.164.152.30 - - [23/May/2012:14:01:05 +0200] "GET http://www.vgtv.no/video/img/94949_160px.jpg HTTP/1.1" 200 3889 "http://www.vgtv.no/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"

Вот мой JS код:
$.get('file.log', function(data) {
  var lines = data.split("\n");
  $.each(lines, function(n, elem) {
    var url = elem.match(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig);
    var parts = url.toString().split(',h');				
    var file=parts[0];
    var hostname='h' + parts[1];
});

В итоге я получаю под parts[0] все имена файлов, как мне их теперь сравнить между собой и посчитать одинаковые, как я понимаю это первые элементы многомерного массива?
Ответить с цитированием
  #2 (permalink)  
Старый 08.06.2014, 04:44
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от yloboda Посмотреть сообщение
В итоге я получаю под parts[0] все имена файлов, как мне их теперь сравнить между собой и посчитать одинаковые, как я понимаю это первые элементы многомерного массива?
Не вижу я тут многомерного массива...
var parts = url.toString().split(',h');

Зачем вот это надо, если url и так массив?
В общем, если я правильно понял, что надо, то как-то так:
$.get('file.log', function(data) {
  var countObj = {};
  var lines = data.split("\n");
  $.each(lines, function(n, elem) {
    var url = elem.match(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig);				
    var file = url[0];
    var hostname = url[1];
	
	if (file in countObj) {
      countObj[file]++;
    } else {
        countObj[file] = 1;
      }
  });
  
  var urlArr = [];
  for(var url in countObj) {
    var tmpObj = {url: url, count: countObj[url]};
    urlArr.push(tmpObj);
  }
  urlArr.sort(function(obj1, obj2){ return obj2.count - obj1.count });
  alert( JSON.stringify(urlArr,'',2) );
});
Ответить с цитированием
  #3 (permalink)  
Старый 08.06.2014, 14:59
Новичок на форуме
Отправить личное сообщение для yloboda Посмотреть профиль Найти все сообщения от yloboda
 
Регистрация: 21.05.2013
Сообщений: 4

Спасибо вам за совет! Сейчас думаю, что делаю что-то не так, мне нужно вывести 5 хостов, у которых больше всего траффика и 5 более запрашиваемых файлов. По этому лог файлу.
Ответить с цитированием
  #4 (permalink)  
Старый 08.06.2014, 15:00
Новичок на форуме
Отправить личное сообщение для yloboda Посмотреть профиль Найти все сообщения от yloboda
 
Регистрация: 21.05.2013
Сообщений: 4

Я так понимаю что нужно определять по этой цифре 3889, найти сумму?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как удалить div alex2012 jQuery 5 13.10.2016 17:43
Подскажите как поступить. merzavchick jQuery 9 24.08.2012 23:57
Не правильно работает прокрутка, подскажите как сделать правильно? denfer12 Общие вопросы Javascript 0 09.05.2012 00:34
подскажите, как сделать индикатор «до начала загрузки страницы»? SergAG Элементы интерфейса 7 31.05.2011 19:53
Подскажите как при помощи JS hta в трею свернуть kimboo Общие вопросы Javascript 4 11.07.2008 16:00