2016-08-19 17 views
3

私はmapとCheerioの結果のリストを使用して属性値を返しています。私が望むのは、属性値のリスト(この場合はID)を含む変数ですが、代わりに私はIDと余分なデータを取得しています。Cheerio Map Strange Behavior

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

結果:

1012938412 
493240324 
123948532 
423948234 
... 

しかし、次のコードは、IDを返しますが、異なるフォーマットで:

次のコードは、IDのリストを出力します

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

console.log(ids) 

結果:

... 
'69': '234234234, 
'70': '9328402397432', 
'71': '1324235234', 
    options: 
    { withDomLvl1: true, 
    normalizeWhitespace: false, 
    xmlMode: false, 
    decodeEntities: true }, 
    _root: 
    { '0': 
     { type: 'root', 
     name: 'root', 
     attribs: {}, 
... 

この追加データは何ですか?確かに必須ではありません。私はむしろ普通の配列を持っています。 http://api.jquery.com/map/によると

答えて

5

戻り値は配列が含まれているjQueryオブジェクト、であるとして、それは基本的な配列で動作するように結果にに.get()を呼び出すために 非常に一般的です。

これは動作するはずのようなので、それが見えます:

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

感謝:あなたは通常の配列をしたい場合は

は、しかし、チェリオはあなたに便利なtoArray機能を提供します!これは本当に助けになりました。 – veldtmana

1

すべてこの余分なデータは何?確かに必須ではありません。私はむしろ普通の配列を持っています。

チェリオは、その機能のほとんどは、追加機能を連鎖させることができているオブジェクトを返す意味、流暢 APIを持っています。 mapが "普通の配列"を返したばかりの場合、結果に対して追加のCheerio関数を呼び出すことはできません。 map呼び出しの結果に追加の関数呼び出しを連鎖させることはできませんが、Cheerioの開発者は(jQueryの開発者からの手掛かりを得て)、それを特別なケースで唐辛子にする。

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

console.log(ids.toArray()); 
// => [ '1012938412', '493240324', '123948532', '423948234' ]