如何在JavaScript中将嵌套数组中的字符串转为数字?map方法失效求助
问题分析与解决
先看你的原始数据结构:
const detail = [{"User": {"id": 1, "name":"jack", "address":[{"zip":"333"}]}}];
你写的代码存在三个问题:
- 访问路径错误:
detail的每个元素是包含User属性的对象,直接用item.address找不到对应属性,正确路径是item.User.address - 语法错误:
Number(e.zip)后面缺少闭合括号 - 结构丢失:直接返回
map后的address数组,会丢失原对象的User等其他结构
正确实现方式
方式一:直接修改原数据
适合允许改动原数据的场景:
detail.forEach(item => { item.User.address.forEach(e => { e.zip = Number(e.zip); }); });
方式二:生成新对象(不修改原数据)
如果不想影响原数据,用扩展运算符拷贝结构并修改目标值:
const newDetail = detail.map(item => ({ ...item, User: { ...item.User, address: item.User.address.map(e => ({ ...e, zip: Number(e.zip) })) } }));
原代码失效的具体原因
再看你的原代码:
detail.map((item) => { return item.address.map(e => Number(e.zip) })
item.address不存在,调用map会直接报错- 即便路径正确,返回的也只是处理后的address数组,原对象的其他结构会全部丢失
Number(e.zip)缺少闭合括号,属于语法错误,代码无法正常执行
内容的提问来源于stack exchange,提问作者simon
相关产品推荐
相关产品推荐

