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

为何从MySQL获取的数组转成res1后调用map()时报错:res1.map() is not a function?

问题原因与解决方案

我来帮你理清这个问题的来龙去脉哈:

核心原因:你拿到的result不是真正的JavaScript数组

虽然从描述看它是“包含RowDataPacket的数组”,但Node.js的MySQL驱动返回的结果有时候是类数组对象(比如带有length属性、数字键,但不是Array的实例)。而typeof检测数组和普通对象都会返回object,所以这个判断方式完全没用——你得用Array.isArray(result)来确认它是不是真正的数组,大概率会返回false。

那为什么JSON.parse(JSON.stringify(result))也不行?因为类数组对象被JSON.stringify后会变成一个带数字键的普通对象(比如{"0": {...}, "1": {...}, "length": 2}),JSON.parse解析后还是普通对象,自然没有map方法。

而你手动赋值的“相同结构数据”是真正的数组,所以map能正常工作。

解决办法:把类数组对象转成真正的数组

你可以用以下几种方式之一来转换result,得到真正的数组后就能正常调用map了:

方式1:使用Array.from()

var res1 = Array.from(result);

方式2:使用扩展运算符...

var res1 = [...result];

方式3:使用Array.prototype.slice.call()

var res1 = Array.prototype.slice.call(result);

转换完成后,你可以再用Array.isArray(res1)验证一下,返回true就说明是真正的数组了,map方法自然能正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:58