Cheerio Map奇怪的行为

Bug*_*rUK 10 node.js cheerio

我正在使用mapCheerio结果列表来返回属性值.我想要的是一个包含属性值列表的变量(在本例中为ID),但我得到的是ID和额外的数据.

以下代码打印ID列表:

let ids = $('[data-profileid]').map(function() {
    console.log($(this).attr('data-profileid'))
})
Run Code Online (Sandbox Code Playgroud)

结果:

1012938412
493240324
123948532
423948234
...
Run Code Online (Sandbox Code Playgroud)

但是,以下代码返回ID,但格式不同:

let ids = $('[data-profileid]').map(function() {
    return $(this).attr('data-profileid')
})

console.log(ids)
Run Code Online (Sandbox Code Playgroud)

结果:

...
'69': '234234234,
'70': '9328402397432',
'71': '1324235234',
  options:
   { withDomLvl1: true,
     normalizeWhitespace: false,
     xmlMode: false,
     decodeEntities: true },
  _root:
   { '0':
      { type: 'root',
        name: 'root',
        attribs: {},
...
Run Code Online (Sandbox Code Playgroud)

什么是这些额外的数据?当然不是必需的.我宁愿只有一个普通的数组.

Jac*_*wes 16

根据http://api.jquery.com/map/:

由于返回值是一个包含数组的jQuery对象,因此在结果上调用.get()以使用基本数组是很常见的.

所以它看起来应该工作:

let ids = $('[data-profileid]').map(function() {
    return $(this).attr('data-profileid')
}).get()
Run Code Online (Sandbox Code Playgroud)


Jor*_*ing 7

所有这些额外的数据是什么?这当然不是必需的。我宁愿只有一个普通的数组。

Cheerio 有一个流畅的API,这意味着它的大部分函数都会返回一个对象,在该对象上可以链接其他函数。如果map只是返回一个“普通数组”,那么您将无法对结果调用其他 Cheerio 函数。有没有很多的方式,你可以连附加功能调用到的结果你的 map电话,它返回一个字符串数组,但Cheerio的开发人员(以从jQuery的开发人员的提示),选择保持一致的API,而不是辣椒它与特别案例。

但是,如果您想要一个普通数组,Cheerio 为您提供了一个方便的toArray函数:

let ids = $('[data-profileid]').map(function() {
  return $(this).attr('data-profileid')
});

console.log(ids.toArray());
// => [ '1012938412', '493240324', '123948532', '423948234' ]
Run Code Online (Sandbox Code Playgroud)