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

BLE设备数据采集:如何将时间与加速度数组转为键值对?

解决方案

首先,你当前的代码是把time和acc_dx作为独立元素依次添加到数组里,导致array_acc_dx变成了扁平的交替结构。要得到你想要的键值对形式,只需要修改数组更新的逻辑,每次添加一个包含时间和加速度的键值对对象即可。

步骤1:修正数组更新逻辑

把原有的数组更新代码替换成下面的写法,每次向数组中添加一个键值对对象,而不是分开添加时间和加速度:

// 替换原有的accUpdate_acc_dx定义
const accUpdate_acc_dx = [
  ...this.state.array_acc_dx,
  { [this.state.time]: this.state.acc_dx } // 用时间作为键,加速度数组作为值
];
this.setState({ array_acc_dx: accUpdate_acc_dx });

这样更新后,array_acc_dx的结构会变成:

[
  { 1520: [42,-419,-926] },
  { 1520: [41,-420,-927] },
  { 1520: [41,-421,-927] },
  { 1580: [40,-420,-927] },
  ...
]

步骤2:格式化输出为目标字符串

如果你需要把这个数组转换成你展示的那种字符串格式(比如1520: [42,-419,-926], 1520: [41,-420,-927], ...),可以用map和join来处理:

const formattedResult = this.state.array_acc_dx.map(item => {
  // 取出每个对象中的键(时间)和值(加速度数组)
  const [time, accArray] = Object.entries(item)[0];
  // 拼接成目标格式的字符串
  return `${time}: [${accArray.join(',')}]`;
}).join(', ');

console.log(formattedResult);
// 输出:1520: [42,-419,-926], 1520: [41,-420,-927], 1520: [41,-421,-927], 1580: [40,-420,-927]

额外优化:简化时间解析逻辑

你的原代码中解析时间的步骤有点冗余,readUInt16LE已经直接返回数字了,不需要再转十六进制字符串再parseInt,可以简化成:

const time = Buffer.from(characteristic.value, "base64").readUInt16LE(0);

这样能减少不必要的类型转换,提升代码效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:33:20