2016-08-19 3 views
3

Ich verwende map mit einer Liste von Cheerio-Ergebnissen, um einen Attributwert zurückzugeben. Was ich will, ist eine Variable, die eine Liste von Attributwerten (in diesem Fall IDs) enthält, aber stattdessen bekomme ich die IDs und zusätzliche Daten.Cheerio Map Seltsames Verhalten

Der folgende Code druckt eine Liste von IDs:

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

Ergebnis:

1012938412 
493240324 
123948532 
423948234 
... 

Aber der folgende Code die IDs zurückgibt, aber in einem anderen Format:

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

console.log(ids) 

Ergebnisse:

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

Was sind all diese zusätzlichen Daten? Es ist sicherlich nicht erforderlich. Ich hätte lieber ein normales Array.

Antwort

5

Nach http://api.jquery.com/map/:

als Rückgabewert ist ein jQuery-Objekt, das eine Anordnung enthält, dann ist es sehr häufig () auf dem Ergebnis zu nennen .get mit einer grundlegenden Anordnung zu arbeiten.

So sieht es aus wie das funktionieren sollte:

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

Dank! Das hat mir sehr geholfen. – veldtmana

1

Was alle diese zusätzlichen Daten? Es ist sicherlich nicht erforderlich. Ich hätte lieber ein normales Array.

Cheerio hat eine fließend API, die meisten seiner Funktionen ein Objekt zurückgeben, auf dem verkettet werden können zusätzliche Funktionen bedeutet. Wenn map gerade ein "gewöhnliches Array" zurückgegeben hat, dann könnten Sie keine zusätzlichen Cheerio-Funktionen auf dem Ergebnis aufrufen. Es gibt nicht viele Möglichkeiten, wie Sie zusätzliche Funktionsaufrufe auf das Ergebnis Ihrer Aufruf, die eine Reihe von Strings zurückgibt, aber Cheerios Entwickler (unter Berücksichtigung der Entwickler von jQuery) wählen, um eine konsistente API statt zu halten pfeffern Sie es mit speziellen Fällen.

Wenn Sie ein gewöhnliches Array wollen, obwohl, Cheerio gibt Ihnen eine praktische toArray Funktion:

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

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