无法迭代数组

时间:2017-02-19 06:21:41

标签: javascript node.js cheerio

我正在测试nodejs模块x-raycheerio

以下是我的代码:

const Xray = require("x-ray");
const cheerio = require('cheerio');

const xray = new Xray();

xray('https://news.ycombinator.com/', 'body@html')((err, result) => {
    const $ = cheerio.load(`<body>${result}</body>`);

    const elements = $('body')
        .find('*')
        .filter((i, e) => (
            e.type === 'tag'
        ))
        .map((i, e) => {
            e.foo = {
                id: i
            };
            return e;
        })
        .filter((i, e) => (
            e.foo.id % 2 === 0
        ));

    const elementsArray = elements.toArray();

    console.log('Length of the array is:', elementsArray.length);

    elementsArray.forEach((e) => {
        console.log('I appear to print only once, even though elementsArray has lots of elements');
    });
});

这里的问题是console.log()循环中的forEach只打印一次 - 即使早期console.log(elementsArray.length)的输出大约是369。

Runkit link to test it out

我检查了elementsArray的类型,我得到Arrayarray作为类型。为什么循环只运行一次?

1 个答案:

答案 0 :(得分:1)

该消息多次显示,但控制台会将同一消息的重复(一言不发)整合到一行,旁边有一个计数器。

如果您要更改消息以使其每次都是唯一的,您会看到差异。

例如,如果您要在消息中使用索引:

> db.abc.replaceOne({"_id":null}, {"test":"1"}, {"upsert": true})
> db.abc.find()
{ "_id" : null, "test" : "1" }

查看与runkit.com

上更新的脚本的不同之处