JavaScript:将对象数组的字符串型reportId转为整数并提取数字数组
问题核心错误说明
你之前的代码逻辑存在两处偏差,导致执行失败:
reports是包含多个对象的数组,本身不存在reportId属性,这个字段是数组下每个元素对象的自有属性,直接通过reports.reportId取值会得到undefined,后续调用split自然会报错- 你的场景里每个
reportId是独立的纯数字字符串,根本不是逗号拼接的长字符串,多余调用split(',')是完全不匹配当前数据结构的操作
你原本选择map + parseInt的技术思路是完全正确的,只是方法的调用位置写错了。
可直接运行的正确实现
场景1:提取所有reportId为独立数字组成的数组(匹配你期望的[21,11,61]结果)
let reports = [ {reportId: "21", title: "Online", code: "ON" }, {reportId: "11", title: "Retail", code: "RE" }, {reportId: "61", title: "Walk-in", code: "WI" } ] // 直接对原数组做map遍历,逐个取出元素的reportId做整数转换 let ids = reports.map(function (item) { return parseInt(item.reportId, 10); }); console.log(ids) // 控制台输出 [21, 11, 61]
场景2:保留原数组的对象结构,仅将每个对象内的reportId从字符串转为整数
如果不需要拆分出纯ID数组,只是想修正原数组每个元素的字段类型,可以用展开运算符保留原有其他字段:
let convertedReports = reports.map(item => { return { ...item, reportId: parseInt(item.reportId, 10) } })
补充注意事项
- 调用
parseInt时一定要传第二个参数10指定十进制解析,避免遇到以0开头的数字字符串时被错误按八进制解析 - 针对纯数字格式的字符串,也可以用
Number(item.reportId)、+item.reportId的方式完成数值转换,效果和当前场景下的parseInt一致
内容的提问来源于stack exchange,提问作者neoslo
相关产品推荐
相关产品推荐

