You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分Axios GET请求返回的对象数组?

处理Axios返回的对象并拆分单独使用

嘿,我看你已经走对路啦!你现在通过Object.keys()遍历API返回的对象来渲染每个加密货币信息,这本身是完全可行的。不过从你的描述来看,你可能更希望把这些数据转换成数组形式,让每个加密货币作为独立的对象存在,这样后续不管是单独调用某条数据,还是做排序、过滤这类操作都会更灵活。

先理清楚当前的情况:你调用的API返回的并不是数组,而是一个以加密货币代码(比如BTC、ETH)为键的对象,结构大概是这样:

{
  BTC: { EUR: 25000, CHANGE: 2.5 },
  ETH: { EUR: 1500, CHANGE: -1.2 },
  // ...其他货币数据
}

方案1:转换为数组(推荐,更灵活)

在处理Axios响应的时候,我们可以把这个对象转换成数组,每个元素包含货币代码和对应的价格、涨跌数据:

componentDidMount() {
  axios
    .get(
      "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,XRP,BCH,EOS,TRX&tsyms=EUR,CHANGE&api_key=xxx"
    )
    .then(res => {
      // 使用Object.entries把对象转为[key, value]数组,再映射成我们需要的结构
      const cryptosArray = Object.entries(res.data).map(([symbol, data]) => ({
        symbol, // 货币代码,比如BTC
        eurPrice: data.EUR, // 欧元价格
        change: data.CHANGE // 涨跌幅
      }));
      this.setState({ cryptos: cryptosArray });
    });
}

然后修改渲染部分,现在this.state.cryptos是数组了,直接遍历即可,记得加上React要求的key属性(这是React列表渲染的最佳实践,能避免性能警告):

render() {
  return (
    <div className="test">
      {this.state.cryptos.map(crypto => (
        <div key={crypto.symbol} id="crypto-container">
          <span className="left">{crypto.symbol}</span>
          <span className="right">
            <NumberFormat 
              value={crypto.eurPrice} 
              displayType={"text"} 
              decimalPrecision={2} 
              thousandSeparator={true} 
              prefix={"€"} 
            />
          </span>
          {/* 要是需要显示涨跌幅,直接用crypto.change就行 */}
          <span className="change">{crypto.change}%</span>
        </div>
      ))}
    </div>
  );
}

这样处理后,你想单独使用某条数据就很方便了,比如要拿ETH的价格:

const ethData = this.state.cryptos.find(c => c.symbol === 'ETH');
console.log(ethData?.eurPrice);

方案2:保留原对象结构(适合简单场景)

如果只是想单独访问某个货币的数据,其实不用转换数组,直接通过键名获取就行:

// 比如获取BTC的欧元价格
console.log(this.state.cryptos.BTC.EUR);

这种方式适合不需要批量操作数据的简单场景,你的原代码其实已经支持这种用法啦。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:36:05