Я использую cheerio, чтобы сделать несколько операций по просмотру веб-страниц.Существует сценарий, в котором я хочу получить таблицу с веб-страницы и извлечь определенную информацию, которая мне нужна.
Например,
const $table = $("table").eq(3);
Теперь у меня есть объект $table
cheerio.Поскольку я буду использовать данные таблицы несколько раз, я хочу превратить их во что-то более простое.Я определил что-то вроде этого
// a row of the table
function PlayDataEntry(no, title, bmsid, clear, ranking) {
this.no = no;
this.title = title;
this.bmsid = bmsid;
this.clear = clear;
this.ranking = ranking;
}
Я хотел бы превратить $table
в массив PlayDataEntry
.
Так что теперь мне нужно выполнить некоторые обходы:
PlayDataEntry.createFromTable = function($, $table) {
const $rows = $table.find("tr")
.not(":has('th')"); // no header row
const entries = [];
$rows.each((i, el) => {
const $row = $(el);
const entry = PlayDataEntry.createFromRow($row);
entries.push(entry);
});
return entries;
};
И я буду использовать это вот так
// ... some requests ...
.then(($) => {
const $table = MyList.getPlayDataTable($);
const entries = PlayDataEntry.createFromTable($, $table);
entries.forEach((entry) => {
console.log(entry.toString());
});
})
Но я чувствую необходимость пройти $, $table
очень неловко.Единственная причина, по которой я должен это сделать, заключается в том, что cheerio each()
дает мне элемент голости, поэтому я должен снова использовать $ ().Я могу сделать другой метод, который напрямую получает $ и возвращает массив PlayDataEntry
, но перед этим я хотел бы знать, есть ли другие способы избежать $, $table
?