记录一下,可以直接跳过,看下面的错误和正确示范

今天在写项目的时候,程序中的一个操作是需要在更新画布的同时将对应的json也进行同步更新,而更新这个json时需要将一个map对象转为json格式,然后赋值给json 的一个属性[暂时叫这个属性为 jMap]. 但每次更新json后,json的jMap属性都为空,因为这个操作的代码逻辑相对比较复杂,而且一开始也没想到会是这里出问题,所以这个问题找了找了将近两个小时才发现问题的根源,就是出在将map对象转为json格式上,先看一下我之前的错误示范:

错误的遍历方法
//这个是错误示范,这样是进不了for循环的
let arr = new Array();
for (let i in map){
		let temp={"name":'',"val":''};
		temp.name=i;
		temp.val=map[i];
		arr.push(temp);
	}
正确的遍历方法(之一):
let arr = new Array();
map.forEach(function(value, key, map)
  {
    let temp={"name":'',"val":''};
    temp.name=key;
    temp.val=value;
    arr.push(temp);
  })
[可以不看]总结:

之所以这么久才定位到出错位置,一方面是这个操作的逻辑有点绕,另一方面就是这里的代码之前是可以进入for循环的冰正确执行,所以一直没想到会是这里的问题,至于之前为什么可以使用,我认为有几种可能:
可能1:
之前的代码有一些操作我没有注意到,导致这个对象哪里出现了问题,这个可能性不大
可能2:
之前的可以用错误示范的代码正确运行,是因为之前只有一个保存操作,所以可以遍历,而之后新增的一些操作将这个map不停进行转换和包装,所以这时的map里面的格式可能和之前不一样,所以无法遍历,这样说的话,其实上面的错误示范的代码也是可以遍历map的…
反正上面的两种方法,错误的方法不行,就试试正确的示范方法,正确的示范方法不行,就试试错误的,应该会有一种可以.已经半夜12点了,这个问题之后有空再好好研究一下,再重写这个博客,溜了