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

JavaScript中如何实现每个城市仅保留最新5条WebSocket推送数据

实现思路

首先修正你给出的预期存储结构的语法问题,更合理易操作的结构是以城市名为键、历史数据数组为值的对象,存取效率远高于数组套对象的结构:

// 合理的state结构示例
myData: {
  Newyork: [
    {value:10, time:"13:8"},
    {value:150, time:"13:20"}
  ],
  London: [
    {value:20, time:"13:8"},
    {value:25, time:"13:20"}
  ],
  Sydney: [
    {value:20, time:"13:20"}
  ]
}

完整实现代码

// 先浅拷贝当前state的myData,避免直接修改原state(符合React不可变原则)
const currentMyData = {...this.state.myData};

// 遍历本次WebSocket返回的所有数据
res.forEach(item => {
  const { city, value, time } = item;
  // 城市不存在时初始化空历史数组
  if (!currentMyData[city]) {
    currentMyData[city] = [];
  }
  // 插入最新数据到数组末尾
  currentMyData[city].push({value, time});
  // 超过5条时删除最早的1条,始终保留最近5条数据
  if (currentMyData[city].length > 5) {
    currentMyData[city].shift();
  }
})

// 更新state
this.setState({ myData: currentMyData });

后续要取指定城市的历史数据直接调用this.state.myData['城市名']即可拿到对应数组,可直接传入图表组件使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:00