Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Подскажите как сравнить первые элементы многомерного массива? (https://javascript.ru/forum/dom-window/47779-podskazhite-kak-sravnit-pervye-ehlementy-mnogomernogo-massiva.html)

yloboda 06.06.2014 23:37

Подскажите как сравнить первые элементы многомерного массива?
 
Мне необходимо посчитать одинаковые 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] все имена файлов, как мне их теперь сравнить между собой и посчитать одинаковые, как я понимаю это первые элементы многомерного массива?

jsnb 08.06.2014 04:44

Цитата:

Сообщение от yloboda (Сообщение 315407)
В итоге я получаю под 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) );
});

yloboda 08.06.2014 14:59

Спасибо вам за совет! Сейчас думаю, что делаю что-то не так, мне нужно вывести 5 хостов, у которых больше всего траффика и 5 более запрашиваемых файлов. По этому лог файлу.

yloboda 08.06.2014 15:00

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


Часовой пояс GMT +3, время: 06:05.