Array.push没有正确推送

时间:2016-08-20 13:12:58

标签: javascript jquery express npm cheerio

编辑:我已经添加了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)

})

我已经失去了智慧,已经花了好几个小时。知道为什么他们没有为我正确迭代?提前谢谢!

3 个答案:

答案 0 :(得分: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找到子项并逐个推送到数组

答案 1 :(得分: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);
    })

答案 2 :(得分:-1)

试试这个

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