每个循环中的数组.push返回用相同对象填充的数组

时间:2019-07-09 16:00:10

标签: arrays node.js web-scraping

我正在尝试使用cheeriosJS在网络上抓取页面以获取一些信息。问题是,我需要一个each循环来覆盖一个变量并将该变量推入一个空数组。尽管我正确地进行了网络抓取(每个循环我都得到了一个不同的对象),但是当循环完成后我打印数组时,我得到的数组与同一个对象重复了多次。 我在这里想念什么?

const rp = require('request-promise');
const $ = require('cheerio');

let marketSpain = {
    country: 'Spain',
    name: 'IBEX 35',
    companies: []
}

let companySpain = {
    name: null,
    last: null,
    high: null,
    low: null,
    change: null,
    changePerCent: null,
    volume: null,
    time: null,
    purchase: false,
    sale: false
}

rp({
    uri: 'url',
    headers: {
        'User-Agent': 'Request-Promise'
    }
}).then(html => {
    $("table[class='genTbl closedTbl crossRatesTbl elpTbl elp30'] > tbody > tr", html).each((i, elem) => {
        companySpain.name = $("td[class='bold left noWrap elp plusIconTd'] > a", html).eq(i).html();
        companySpain.last = $("td", elem).eq(2).text();
        companySpain.high = $("td", elem).eq(3).text();
        companySpain.low = $("td", elem).eq(4).text();
        companySpain.change = $("td", elem).eq(5).text();
        companySpain.changePerCent = $("td", elem).eq(6).text();
        companySpain.volume = $("td", elem).eq(7).text();
        companySpain.time = $("td", elem).eq(8).text();

        marketSpain.companies.push(companySpain);
    });
    console.log(marketSpain)
    markets.push(marketSpain);


}).catch(err => {
    console.log(err);
})

1 个答案:

答案 0 :(得分:1)

您正在修改同一对象,并将其附加到列表的末尾。您想做的是这样:

In [10]: df.loc[df.index.month>2, 'year_attrib'] = df[df.index.month>2].index.year + 11

In [11]: df.loc[df.index.month<=2, 'year_attrib'] = df[df.index.month>2].index.year + 15

In [12]: df
Out[12]:
            data  year_attrib
2004-03-01    93         2015
2004-03-02    48         2015
2004-03-03    88         2015
2004-03-04    44         2015
2004-03-05    11         2015
2004-03-06     4         2015
2004-03-07    70         2015