基于字符串数组过滤API数据

时间:2018-02-21 02:53:14

标签: javascript reactjs

我试图在React中过滤掉外部API(CoinMarketCap)中的数据。

我只想要一组特定代码的数据,但经过多次尝试后,我似乎无法使其正常工作。我觉得这应该是一个简单的解决方案,但似乎无法弄明白。

getData = () => {
      const tickers = ["btc", "xrp", "eth", "ltc", "bch", "etc", "str", "xmr", "nxt", "zec", "rep", "dash"];
      fetch(`https://api.coinmarketcap.com/v1/ticker`)
      .then(res => res.json())
      .then(data => data.filter(d => tickers.includes(d.symbol)))
      .then(results => console.log(results)
    ) 

但它已经注销了一个空数组。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

每个then()都需要Promise或任何可用的功能。问题是Array.prototype.filter()不是承诺而不是解决任何问题(它不是异步函数)。你应该这样写:

getData = () => {
      const tickers = ["btc", "xrp", "eth", "ltc", "bch", "etc", "str", "xmr", "nxt", "zec", "rep", "dash"];
      fetch(`https://api.coinmarketcap.com/v1/ticker`)
      .then(res => res.json())
      .then(data => console.log(data.filter(d => tickers.includes(d.symbol))))
    ) 

答案 1 :(得分:0)

如果您从fetch获取数据,请将toLowerCase()添加到d.symbol

tickers.include(d.symbol.toLowerCase()

答案 2 :(得分:0)

原来这是一个CORS问题。我不得不将fetch移动到我的后端并从REACT组件调用。现在工作正常。感谢。