Array.push 没有正确推送

Posted

技术标签:

【中文标题】Array.push 没有正确推送【英文标题】:Array.push not pushing properly 【发布时间】:2016-12-27 12:42:42 【问题描述】:

编辑:我添加了 res.send(json),不包括 sn-p。

我正在尝试提取/抓取网站并将其输出组合到 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...

这是下面的sn-p:

    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)

)

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

【问题讨论】:

您是否尝试对此进行调查(...使用调试器)? 您正在更改 json 的值,但没有将广告新值推送到数组中 【参考方案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 找到孩子并将它们一个一个推送到数组中

【讨论】:

谢谢,“(this)”确实有帮助。起初,当我尝试您的修复时,我意识到我的 CSS 选择器只是选择了一个孩子。我将其更改为 "$('.catlist').find('li').each(function(key, index) " 并且它起作用了。猜猜如果没有看到网站被刮掉,这很难提供帮助。;) 谢谢你的帮助。 当您编写并了解更多信息时,您将构建自己的错误检测器。 :)【参考方案2】:

正如您在代码中看到的,您在每次迭代中都为 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);
    )

【讨论】:

【参考方案3】:

试试这个

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

【讨论】:

以上是关于Array.push 没有正确推送的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 没有正确推送

如何在推送通知中正确使用 UDID?

如何正确禁用/启用推送通知

当结构有两个以上参数时,带有 array.push() 的 Solidity 函数不起作用

推送通知未正确连接到 Firebase 消息传递

如何在 Smarty 修饰符函数中分配新变量?