Array.push не работает правильно

javascript jquery express npm cheerio

535 просмотра

3 ответа

РЕДАКТИРОВАТЬ: я добавил res.send (JSON), не был включен фрагмент.

Я пытаюсь извлечь / очистить веб-сайт и объединить их вывод в данные JSON. Однако, когда я запускаю конечную точку, ответ объединяет каждый результат в свой ключ вместо добавления записи за итерацию. Чтобы изложить, я получаю:

{ 
      item: "item1item2item3item4item5item6",
      title: "title1title2title3title4title5title5",
      price: "price1price2price3price4price5price6"
}

Это мой целевой формат вывода, хотя ..:

{ item: "item1",
  title: "title1",
  price: "price1",
  itemlink: "itemlink1" },
{ item: "item2",
  title: "title2",
  price: "price2",
  itemlink: "itemlink2" },
{ item: "item3",
  title: "title3",
  price: "price3",
  itemlink: "itemlink3" }, etc...

Вот фрагмент кода ниже:

    request(url, function(error, response, html){
    if(!error){
        var $ = cheerio.load(html);

    var json = [];
    /* Pulls out all the titles
    $('.item-name').each(function() {
        var title = $(this).text();
        json2.push({title: title});
    })
    */

    function getID(str) {
        return str.split('viewitem.php?iid=')[1];
    }

    $('.catlist').each(function(key, index) {
        var title = $('.item-name').text();
        var price = $('.catprice').text();
        var id = getID($('h2').children().attr('href'));
        var itemlink = $('h2').children().attr('href');

        json.push({     
            id: id, 
            title: title, 
            price: price, 
            itemlink: itemlink 
        });
    })

}
res.send(json)

})

Я сошел с ума, уже потратил на это часы. Есть идеи, почему они не повторяются для меня должным образом? Заранее спасибо!

Автор: davsp Источник Размещён: 08.11.2019 11:21

Ответы (3)


1 плюс

Решение
 $('.catlist').each(function(key, index) {
    var title = $(this).find('.item-name').text();
    var price = $(this).find('.catprice').text();
    var id = getID($(this).find('h2').children().attr('href'));
    var itemlink = $(this).find('h2').children().attr('href');

    var temp = 
    {   
        id: id, 
        title: title, 
        price: price, 
        itemlink: itemlink 
    };
    json.push(temp);
})

Вам нужно найти детей для каждого .catlistи подтолкнуть их к массиву один за другим

Автор: tom10271 Размещён: 20.08.2016 01:39

0 плюса

Как вы можете видеть в своем коде, вы присваиваете значение json на каждой итерации. Вот почему он не добавляет новую запись. Посмотрите на этот код

 $('.catlist').each(function(key, index) {
        var title = $('.item-name').text();
        var price = $('.catprice').text();
        var id = getID($('h2').children().attr('href'));
        var itemlink = $('h2').children().attr('href');

        var temp = 
        {   
            id: id, 
            title: title, 
            price: price, 
            itemlink: itemlink 
        };
        json.push(temp);
    })
Автор: Aman Rawat Размещён: 20.08.2016 01:18

-1 плюса

Попробуй это

 json.push( {
   id: id, 
   title: title, 
   price: price,
   itemlink: itemlink 
 });
Автор: Sylwit Размещён: 20.08.2016 01:20
Вопросы из категории :
32x32