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

React中遍历对象遇‘map is not a function’错误,如何映射标签?

解决rates.M.map不是函数的问题并重新映射对象标签

你推测的原因完全正确:rates.M是一个普通JavaScript对象,而map()是数组的原型方法,对象没有这个方法,所以会抛出rates.M.map is not a function的错误。

下面提供两种符合你需求的实现方式,根据你最终想要的数据结构选择:

方式一:生成重新命名键名的单个对象

如果需要将原对象的lab、dme等键替换为Lab、DME这类友好标签,同时保持层级结构,可以用以下代码:

// 定义原键名到显示标签的映射表,方便后续维护
const labelMap = {
  dme: 'DME',
  lab: 'Lab',
  drugs: 'Drugs',
  radio: 'Radio',
  therapy: 'Therapy'
};

// 将原对象转换为键值对数组,替换键名后再转回对象
const mappedRates = Object.fromEntries(
  Object.entries(rates.M).map(([key, value]) => [labelMap[key], value])
);

执行后mappedRates的结构为:

{
  "DME": { "S": "75%" },
  "Lab": { "S": "50%" },
  "Drugs": { "S": "100%" },
  "Radio": { "S": "85%" },
  "Therapy": { "S": "80%" }
}

方式二:生成包含单个标签项的数组

如果需要得到一个数组,每个元素是仅包含一个标签-值的对象(类似你原代码试图实现的逻辑),可以用以下代码:

const labelMap = {
  dme: 'DME',
  lab: 'Lab',
  drugs: 'Drugs',
  radio: 'Radio',
  therapy: 'Therapy'
};

// 遍历原对象的键值对数组,生成新的数组项
const rateList = Object.entries(rates.M).map(([key, value]) => ({
  [labelMap[key]]: value
}));

执行后rateList的结构为:

[
  { "Lab": { "S": "50%" } },
  { "DME": { "S": "75%" } },
  { "Therapy": { "S": "80%" } },
  { "Radio": { "S": "85%" } },
  { "Drugs": { "S": "100%" } }
]

补充:简单硬编码方式(不推荐)

如果原对象的键固定不会变化,也可以直接手动构建目标对象,但这种方式扩展性差,后续键名变动时需要手动修改代码:

const mappedRates = {
  DME: rates.M.dme,
  Lab: rates.M.lab,
  Drugs: rates.M.drugs,
  Radio: rates.M.radio,
  Therapy: rates.M.therapy
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:43:17