You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将含时间戳的数组转换为自定义键对象并格式化日期用于图表

解决数组转对象并格式化日期的问题

我来帮你搞定这个需求!先看看你现有代码里的几个小问题,然后给你完整的解决方案:

现有代码的问题点

  • new Date("time")这里写错了:你应该用数组里的时间戳(第一个元素)来创建日期对象,而不是字符串"time"
  • 最后一行的Objec...应该是Object.assign({}, ...keyValues),用来把多个零散的键值对象合并成一个完整对象
  • 直接用{...arr}把数组转成对象虽然可行,但用reduce来处理会更高效简洁

完整解决方案(推荐用reduce)

这个方案会在数组转对象的同时,直接完成日期格式化,一步到位:

// 你的原始数据数组
const arr = [1524314460000, 0.067872, 0.067876, 0.067876, 0.06785, 0.41500986];

// 定义数组索引和目标对象键的映射关系
const keyMapping = {
  0: "time",
  1: "open",
  2: "low",
  3: "high",
  4: "close",
  5: "volume"
};

// 把时间戳格式化为图表友好的日期格式(可按需调整)
function formatChartDate(timestamp) {
  const date = new Date(timestamp);
  // 示例格式:YYYY-MM-DD HH:mm,适合大多数图表展示
  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
}

// 核心转换函数:数组转带指定键的对象,同时格式化日期
function transformArrayToChartObject(arr, keyMap) {
  return arr.reduce((finalObj, value, index) => {
    const targetKey = keyMap[index] || index;
    // 对time字段单独做格式化,其他字段直接保留原值
    finalObj[targetKey] = targetKey === "time" ? formatChartDate(value) : value;
    return finalObj;
  }, {});
}

// 执行转换并查看结果
const chartDataObj = transformArrayToChartObject(arr, keyMapping);
console.log(chartDataObj);

修正你原来的renameKeys函数的版本

如果你更想用自己最初的思路,也可以修正renameKeys函数来实现:

const arr = [1524314460000, 0.067872, 0.067876, 0.067876, 0.06785, 0.41500986];
const obj = {...arr};
const newKeys = {0: "time", 1: "open", 2:"low",3:"high",4:"close",5:"volume" };

// 同样需要日期格式化函数
function formatChartDate(timestamp) {
  const date = new Date(timestamp);
  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
}

function renameKeys(obj, newKeys) {
  // 用Object.assign合并所有键值对,同时处理日期格式化
  return Object.assign({}, ...Object.keys(obj).map(key => {
    const newKey = newKeys[key] || key;
    const processedValue = newKey === "time" ? formatChartDate(obj[key]) : obj[key];
    return { [newKey]: processedValue };
  }));
}

const result = renameKeys(obj, newKeys);
console.log(result);

两种方法都能得到你想要的结果,其中reduce的方式代码更紧凑,性能也更好哦。

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

火山引擎 最新活动