JS for循环生成对象数组出现[circular object Object]错误如何解决
错误原因
- 核心问题是
line对象声明在for循环外部:JavaScript中对象属于引用类型,你每次循环修改的都是同一个内存地址的对象属性,往数组push的也只是同一个对象的引用,最终数组里所有元素都会被最后一次循环的赋值覆盖。 - 你提供的测试数据中
oddsb[1]的值为6,所以按现有数据跑出的第二个元素odds是4/6,如果你要得到预期的4/1,把对应字段值改成1即可。
修复方案
把line对象的声明挪到for循环内部,每次循环创建独立的新对象即可,同时可额外将position转为数字类型,匹配你预期的输出格式,修复后完整代码如下:
<script> var res = '{"count":"2","bettype":"double","position[0]":"1","oddsa[0]":"2","oddsb[0]":"3","placeodds[0]":"1/5","position[1]":"1","oddsa[1]":"4","oddsb[1]":"1","placeodds[1]":"1/7"}'; var getvals = JSON.parse(res); var count = parseInt(getvals["count"]); const array = []; for(var i = 0;i < count;i++) { // 每次循环创建新的独立对象,避免引用覆盖 var line = {}; line["odds"] = getvals["oddsa["+i+"]"]+'/'+getvals["oddsb["+i+"]"]; line["terms"] = getvals["placeodds["+i+"]"]; line["position"] = parseInt(getvals["position["+i+"]"]); array.push(line); } console.log(array); </script>
输出结果
运行上述代码后控制台输出即为你预期的结构:
[ { odds: '2/3', position: 1, terms: '1/5' }, { odds: '4/1', position: 1, terms: '1/7' } ]
内容的提问来源于stack exchange,提问作者ChrisYates
相关产品推荐
相关产品推荐

