Отображение объектов Cheerio в массив «нативных» объектов - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть следующий HTML-код (повторяется несколько раз с другими данными) в документе, который я загрузил с помощью cheerio :

<li class="wprm-recipe-ingredient">
  <span class="wprm-recipe-ingredient-amount">1</span>
  <span class="wprm-recipe-ingredient-unit">pound</span>
  <span class="wprm-recipe-ingredient-name">extra lean ground beef</span>
</li>

Вот код, который я написал, который выражает мои намерения:

const $ingredients = $("li[class='wprm-recipe-ingredient']");

const ingredients = $ingredients.map((_idx, $e) => {
    const $elem = $($e);
    const amount = $elem.children('[class$="-amount"]').text();
    const unit = $elem.children('[class$="-unit"]').text();
    const name = $elem.children('[class$="-name"]').text();
    return { amount, unit, name };
}); // => [{amount, unit, name}, { ... }]

Но этот комментарий иллюстрирует то, что я желаю, а не то, что я на самом деле получаю.

Фактический тип - const ingredients: Cheerio, который не является массивом анонимных объектов в форме, которую я пытался создать.

Как мне отобразить $ingredients в следующую форму?

[{ amount: '1', unit: 'pound', name: 'extra lean ground beef' }]

Обратите внимание, что .get() Cheerio возвращает либо string[], либо CheerioElement[], так что это не то, что я хочу, насколько я могу судить.


Редактировать

Я должен немного расширить это.

В настоящее время я делаю создание массива заранее, затем push на этот массив в конце $ingredients.forEach(...) закрытия.

...