Есть ли способ избежать необходимости передавать как $, так и $ foo при использовании .each () внутри функции? - PullRequest
0 голосов
/ 11 июня 2018

Я использую 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?

...