Как сгруппировать результаты forEach без ключа в javascript? - PullRequest
2 голосов
/ 01 июля 2019

У меня есть список URL-адресов в WordPress, которые должны быть эффективно отсортированы через цикл.

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

urlList.forEach(function(item) {
    var myUrl = item.URL.split("/");
    console.log("https://example.com/" + myUrl[3]);
});

Я попытался вывести объект json с forEach, а затем split URL-адрес, такЯ могу получить вторую часть URL, которая равна cat1, cat2, cat3.Каждый URL не имеет определенной длины.

Знаете ли вы, как я могу получить результат ниже?Я как-то намереваюсь сделать это внутри цикла forEach.

https://example.com/cat1
https://example.com/cat1
https://example.com/cat1
https://example.com/cat2
https://example.com/cat2
https://example.com/cat3

Примечание: Категории НЕ ограничены категориями cat1, cat2, cat3.Это может быть также https://example.com/news или https://example.com/events

Любая помощь очень ценится.Благодаря.

Ответы [ 2 ]

3 голосов
/ 01 июля 2019

Вы можете получить ссылку с первым путем и отсортировать массив.

var urlList = [{ URL: "https://example.com/cat1/aa/bb/cc", "Last crawled": "Jun 23, 2019" }, { URL: "https://example.com/cat2/aa", "Last crawled": "Jun 23, 2019" }, { URL: "https://example.com/cat1/aa/bb/cc/dd/ee", "Last crawled": "Jun 23, 2019" }, { URL: "https://example.com/cat3/aa/bb/cc/", "Last crawled": "Jun 23, 2019" }, { URL: "https://example.com/cat2/aa/bb", "Last crawled": "Jun 23, 2019" }, { URL: "https://example.com/cat1/aa/bb", "Last crawled": "Jun 23, 2019" }],
    result = urlList
        .map(({ URL }) => URL.match(/^https:\/\/example.com\/[^\/]+(?=\/)/)[0])
        .sort((a, b) => a.localeCompare(b));

console.log(result);
1 голос
/ 01 июля 2019

Пример использования underscore.js (вы можете объединить вызовы с подчеркиванием, которое я разделил для понимания цели):

var s = _.map(urlList, function(i) {
  return i.URL.split("/")[3];
});
var sorted = _.sortBy(s)
var projection = _.map(sorted, function(p) {
  console.log("https://example.com/" + p);
});

Пример в jsfiddle:

https://jsfiddle.net/1nwg9pq7/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...