2016-08-19 90 views
3

我使用map與Cheerio結果列表返回屬性值。我想要的是一個包含屬性值列表的變量(在本例中是ID),但我得到的是ID和額外的數據。Cheerio地圖奇怪行爲

下面的代碼打印ID的列表:

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

結果:

1012938412 
493240324 
123948532 
423948234 
... 

但是,下面的代碼返回的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: {}, 
... 

什麼是所有這些額外的數據?這當然不是必需的。我寧願有一個普通的陣列。

回答

5

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

作爲返回值是一個jQuery對象,其中包含一個陣列,它是 很常見的調用獲得()的結果與一個基本陣列工作。

所以看起來這應該工作:

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

的感謝!這真的很有幫助。 – veldtmana

1

什麼是所有這些額外的數據?這當然不是必需的。我寧願有一個普通的陣列。

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' ]