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

前端.map()处理后端关联数组报错及键值映射需求问询

解决方案

问题根源

后端返回的关联数组经过json_encode后会转换为JavaScript对象,而map()是数组专属方法,直接在对象上调用必然报错。用[]包裹后变成[对象]的数组结构,此时map遍历的是数组内的单个对象,无法正确提取键值对来实现需求。

正确实现方式

要将对象的键赋值给value、对应值赋值给label,可以用以下两种方法:

方法1:使用Object.entries()(推荐,ES2017+支持)

Object.entries()会把对象转换为[键, 值]格式的二维数组,再通过map()生成目标结构:

前端实际代码修改为:

const genreOptions = Object.entries({{ genreOptions | json_encode | raw }}).map(([key, value]) => ({
  value: key,
  label: value
}));

调试代码示例:

const genreMap = {
    "Horror": "Korku",
    "Comedy": "Komedi\u0103 Filmi",
    "Action": "Aksiyon",
    "Drama": "Drama"
};
const genreOptions = Object.entries(genreMap).map(([key, value]) => ({
    value: key,
    label: value
}));

方法2:兼容旧环境(使用Object.keys())

如果需要支持不兼容ES2017的环境,先获取对象所有键,再遍历生成数组:

前端实际代码修改为:

const genreMap = {{ genreOptions | json_encode | raw }};
const genreOptions = Object.keys(genreMap).map(key => ({
  value: key,
  label: genreMap[key]
}));

调试代码示例:

const genreMap = {
    "Horror": "Korku",
    "Comedy": "Komedi\u0103 Filmi",
    "Action": "Aksiyon",
    "Drama": "Drama"
};
const genreOptions = Object.keys(genreMap).map(key => ({
    value: key,
    label: genreMap[key]
}));

最终效果

两种方法都会生成符合需求的数组:

[
  { value: "Horror", label: "Korku" },
  { value: "Comedy", label: "Komediă Filmi" },
  { value: "Action", label: "Aksiyon" },
  { value: "Drama", label: "Drama" }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:33:12