使用for of循环生成3个数组组合时第三个数组取值异常如何解决
问题原因
- 最内层遍历
accessory的for循环没有添加花括号{}包裹后续逻辑,默认只有紧跟循环的var room = []这一行属于循环体,剩下的对象赋值、日志打印、索引i自增的代码都在accessory循环全部执行完成后才会运行1次,此时accessory变量已经被遍历到数组的最后一项closed window,所以所有生成的房间对象的accessory属性都是这个值。 var room = []写在循环内部,每次执行都会重置room数组,会清空之前存储的所有房间数据,属于逻辑冗余且有隐患的写法。
修复方案
给内层accessory循环加上花括号包裹所有需要循环执行的逻辑,同时把room数组的初始化移到所有循环的最外层即可。
修复后完整代码
var i = 0; // room数组初始化移到最外层,避免被循环重置 var room = []; for (var wall of [ "red walls", "blue walls", "green walls", "pink walls", "purple walls", "gray walls", "white walls"]) { for (var floor of [ "carpet floor", "oak-wood floor", "spruce-wood floor", "acacia-wood floor", "birch-wood floor"]) { // 给accessory循环添加花括号包裹所有需要循环执行的代码 for (var accessory of [ "no accessory", "open window", "closed window"]) { room[i] = { wall: wall, floor: floor, accessory: accessory }; console.log("Room " + i + " - " + room[i].wall + ", " + room[i].floor + ", " + room[i].accessory); ++i; } } }
内容的提问来源于stack exchange,提问作者Junior
相关产品推荐
相关产品推荐

