JS从字符串生成对象数组:现有代码仅返回最后一项求修正
解决字符串转对象数组的问题
问题原因
你当前的代码只初始化了单个对象,在forEach循环里反复修改这个对象的属性值,最终返回的自然是最后一次修改后的结果,而非对象数组。
修正方案
方法1:使用map函数(简洁首选)
map函数可以直接遍历分割后的条目,把每个条目转换成对象并组成数组:
let datas = "team1 1, team2 2, team3 3"; const teamArray = datas.split(/\s*,\s*/).map(item => { // 分割团队名称和数字,\s+匹配任意数量空格 const [name, countStr] = item.split(/\s+/); // 返回新对象,count转成整数时指定进制更严谨 return { name, count: parseInt(countStr, 10) }; }); console.log(teamArray);
方法2:使用forEach手动构建数组
如果更习惯用forEach,需要先初始化空数组,每次循环创建新对象并推入数组:
let datas = "team1 1, team2 2, team3 3"; const teamArray = []; // 先按逗号分割成单个团队条目,处理逗号前后的空格 datas.split(/\s*,\s*/).forEach(item => { const parts = item.split(/\s+/); // 每次循环创建新对象,避免覆盖之前的对象 teamArray.push({ name: parts[0], count: parseInt(parts[1], 10) }); }); console.log(teamArray);
最终输出
两种方法都会生成你期望的结果:
[{name: "team1", count: 1}, {name: "team2", count: 2}, {name: "team3", count: 3}]
内容的提问来源于stack exchange,提问作者Siyam Hosan
相关产品推荐
相关产品推荐

