Как мне посчитать вхождение слова из списка URL в JavaScript? - PullRequest
1 голос
/ 02 июля 2019

У меня есть список URL-адресов в объекте JSON в WordPress. Я хочу сосчитать вхождение второй части URL.

Код ниже в настоящее время получает остальную часть URL после префикса https://www.example.co. Следующее, что я хочу сделать, это подсчитать вхождение второй части URL, которая равна cat1, cat3, cat2, xmlrpc.php

var urlList = [
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc/dd/ee",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat3/aa/bb/cc/",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/xmlrpc.php",
    "Last crawled": "Jun 19, 2019"
  }
]

const paths = urlList.map(value => value.URL.replace('https://www.example.co', ''));

//console.log(paths);

paths.forEach(function(item) {
    var urlSecondPart = item.split("/")[1];
    console.log(urlSecondPart);
});

Знаете ли вы, как я могу добиться этого с моей текущей forEach петлей?

Любая помощь очень ценится. Спасибо

1 Ответ

1 голос
/ 02 июля 2019

Используйте регулярное выражение для сопоставления не-/ с, следующих после .co/:

var urlList = [
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc/dd/ee",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat3/aa/bb/cc/",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/xmlrpc.php",
    "Last crawled": "Jun 19, 2019"
  }
]

const paths = urlList.map(
  ({ URL }) => URL.match(/\.co\/([^\/]+)/)[1]
);
console.log(paths);

const counts = paths.reduce((a, str) => {
  a[str] = (a[str] || 0) + 1;
  return a;
}, {});
console.log(counts);

На более новых движках вы можете использовать lookbehind вместо извлечения группы захвата:

const paths = urlList.map(
  ({ URL }) => URL.match(/(?<=\.co\/)[^\/]+/)[0]
);

Если вы хотите отслеживать все полные URL-адреса, уменьшите их не только до количества, но и до массива этих полных URL-адресов:

var urlList = [
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb/cc/dd/ee",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat3/aa/bb/cc/",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat2/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/cat1/aa/bb",
    "Last crawled": "Jun 23, 2019"
  },
  {
    "URL": "https://www.example.co/xmlrpc.php",
    "Last crawled": "Jun 19, 2019"
  }
]

const getSecond = url => url.match(/\.co\/([^\/]+)/)[1];

const counts = urlList.reduce((a, { URL }) => {
  const second = getSecond(URL);
  if (!a[second]) {
    a[second] = { count: 0, fullUrls: [] };
  }
  a[second].count++;
  a[second].fullUrls.push(URL);
  return a;
}, {});
console.log(counts);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...