以下是我的代码:
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。
我检查了elementsArray的类型,我得到Array
或array
作为类型。为什么循环只运行一次?
答案 0 :(得分:1)
该消息多次显示,但控制台会将同一消息的重复(一言不发)整合到一行,旁边有一个计数器。
如果您要更改消息以使其每次都是唯一的,您会看到差异。
例如,如果您要在消息中使用索引:
> db.abc.replaceOne({"_id":null}, {"test":"1"}, {"upsert": true})
> db.abc.find()
{ "_id" : null, "test" : "1" }
查看与runkit.com
上更新的脚本的不同之处