JavaScript for循环仅执行一半次数 数组仅1/2元素被处理问题排查
前端开发异常问题:input输入内容对应数组仅1/2被处理
问题背景
input标签用于收集字符或数字,通过如下代码做映射赋值:
let result = Object.fromEntries( Object.entries(answers2).map(([k, v]) => [k, MSamples[v] ]) );
简化示例
输入asdf时映射后的result总长度为4,结构如下:
0: ['M20'] 1: ['M30'] 2:['M40'] 3: ['M50'] length 4
遍历代码
使用如下for循环遍历result:
for (let i = 0; i < Object.keys(result).length; i++) { }
异常现象
运行后仅输出前2条数据:
0: ['M20'] 1: ['M30']
即使注释掉循环体内所有业务代码仅保留console.log('wow'),也只会打印2次wow。
完整可复现代码
JS代码
var MSamples = { "A": [ "M10", ], "B": [ "M20", ], "C": [ "M30", ], "D": [ 'M40', ], } var answers2 = document.getElementById('fname').value; let result = Object.fromEntries( Object.entries(answers2).map(([k, v]) => [k, MSamples[v]]) ); for (let i = 0; i < Object.keys(result).length; i++) { console.log('wow'); }
HTML代码
<form class="form1 " action=""> <input type="text" id="fname" name="fname" value="ABCD"> </form>
问题解决方案
异常根因为for循环体内额外添加了i++语句,移除所有多余的i++实例后功能恢复正常。
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

