【问题标题】:JavaScript add objects to array and iterateJavaScript 将对象添加到数组并迭代
【发布时间】:2016-04-21 16:49:28
【问题描述】:

我正在使用 express 框架从某些网页中获取链接,并将此链接添加到 Array。我正在使用async 打印最终结果,但是当我打印我的数组时,我得到了对象列表。

整理功能的结果:

Finall: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Objec
t] 

如何迭代这个对象数组? 这是我的代码:

router.route('/send')
  .post(function(req, res){
      async.series([ function(callback){
            var url = req.body.url;
            var items = [];

            console.log(url);
            if(url.length>=1) {

              if (isURL(url)) {
                console.log('OK');
                res.sendStatus(200);

                request(url, function(err, resp, body){

                  $ = cheerio.load(body);
                  links = $('a.offer-title');
                  $(links).each(function(i, link){
                     items[i] = new itemParam($(link).text(),12)
                  });
                  callback(false, items);

                });

              } else {
                errorHandling(res, 401,"Invalid url");
              }
            }else{
                errorHandling(res, 401,"Invalid url");
            }
        }
      ],
        /*
         * Collate results
         */
        function(err, p) {
          console.log("Finall: " + p[0]);

       }
      );
  });

【问题讨论】:

  • 呃,你试过循环吗?
  • 是的,我尝试使用 for 循环。 ` for (var key in p) { if (p.hasOwnProperty(key)) { console.log(key + " -> " + p[key]); } }`
  • 你在这里使用async.series吗?此外,您应该始终致电callback,而不是立即跳入errorHandling
  • 我是这个话题的新手。我到底应该使用什么?
  • 这是一个数组,所以你应该use an array loop。此外,您似乎需要遍历p[0],而不是p

标签: javascript arrays node.js express


【解决方案1】:

这是一种简单的方法:

const request = require('request'),
      cheerio = require('cheerio')

const scrape = (url) => {
    return new Promise((resolve, reject) => {
        let links = [] // collect all links here
        request(url, (err, res, body) => {
            if (err) {
                return reject(err)
            }
            let $ = cheerio.load(body)
            $('a').each(function () { // use any selector you like
                links.push($(this).attr('href')) // ...and extract whatever you like
            })
            resolve(links)
        })
    })
}

scrape('http://google.com?q=javascript')
  .then(links => {
      // handle links
      console.log(links)
  })
  .catch(err => {
      // handle error
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2017-03-29
    • 2019-02-27
    相关资源
    最近更新 更多