为何从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
相关产品推荐
相关产品推荐

