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

如何将含嵌套对象的源对象转换为包含货币字段的对象数组

解决嵌套货币对象转带currency字段的数组问题

嘿,我来帮你搞定这个转换问题~你之前的代码已经迈出了第一步,但确实漏掉了货币代码这个关键信息,还把timestamp这种非货币数据也混进去了,咱们调整一下就能得到预期的结果。

需求回顾

先明确一下你的核心需求:把包含多种货币数据的源对象,转换成每个元素都带currency字段的对象数组,同时保留各时间段的数值。

源数据:

var data = { 
  "USD": { "7d": "32053.72", "30d": "33194.68", "24h": "31370.42" }, 
  "AUD": { "7d": "43134.11", "30d": "44219.00", "24h": "42701.11" }, 
  "RUB": { "7d": "2451451.45", "30d": "2465896.74", "24h": "2398589.80" }, 
  "timestamp": 1626699964, 
  "JPY": { "7d": "3537735.55", "30d": "3664620.47", "24h": "3472632.46" }, 
  "BRL": { "7d": "167555.18", "30d": "169473.27", "24h": "163054.93" }, 
  "ILS": { "7d": "108658.72", "30d": "111663.67", "24h": "106988.58" }, 
  "GBP": { "7d": "23257.66", "30d": "23838.55", "24h": "22923.17" }, 
  "PLN": { "7d": "124869.61", "30d": "127872.57", "24h": "122668.16" }, 
  "CAD": { "7d": "40425.62", "30d": "41444.76", "24h": "39827.13" }, 
  "EUR": { "7d": "27187.74", "30d": "27955.81", "24h": "26659.79" } 
}

预期格式:

[ 
  { currency: "USD", 7d: "32053.72", 30d: "33194.68", 24h: "31370.42" }, 
  { currency: "AUD", 7d: "43134.11", 30d: "44219.00", 24h: "42701.11" },
  // ... 其他货币项
]

(注:你示例里的数值看起来是复制失误,比如USD的7d写成了RUB的数值,这里按源数据的对应关系调整)

修改后的代码方案

你需要在map过程中把当前遍历的key(货币代码)作为currency字段,同时过滤掉timestamp这种非货币的键。完整代码如下:

var data = { /* 你的源数据 */ };

var convertedToArray = Object.keys(data)
  // 第一步:过滤掉非货币类型的键(比如timestamp)
  .filter(key => typeof data[key] === 'object' && !Array.isArray(data[key]))
  // 第二步:遍历每个货币键,构建目标对象
  .map(key => {
    return {
      currency: key,
      // 展开当前货币的所有时间段数据
      ...data[key]
    };
  });

代码细节解释

  1. 过滤非货币键:用filter方法筛选出值为对象(且不是数组)的键,自动排除timestamp这种数值类型的无关数据。
  2. 构建目标对象:在map里,每个迭代项返回一个新对象,先设置currency: key(把当前的货币代码存进去),再用扩展运算符...把对应货币的7d、30d、24h字段都展开到新对象里,省去手动逐个赋值的麻烦。

额外调整(如果需要)

如果你确实需要把源数据里的24h改成示例里的24d,可以在构建对象时单独处理这个字段:

.map(key => {
  const currencyData = data[key];
  return {
    currency: key,
    7d: currencyData['7d'],
    30d: currencyData['30d'],
    24d: currencyData['24h'] // 重命名字段
  };
});

这样就能得到完全符合你预期格式的数组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:17:40