如图所示,
两个一样的数组,为什么在chrome上,一个显示{},一个不显示,
该问题导致我怀疑这两组数据到底是不是一样的。。。
生成数据1的代码如下
//数组-经纬度var geoCoordMap = { "齐齐哈尔":[123.97,47.33], "盐城":[120.13,33.38], "赤峰":[118.87,42.28], "青岛":[120.33,36.07]}//处理函数var convertData = function (data) { var res = []; //遍历数组 for (var i = 0; i < data.length; i++) { //按数组名查询数组-经纬度 var geoCoord = geoCoordMap[data[i].name]; //如果匹配 if (geoCoord) { //在新数组中插入对象 res.push({ name: data[i].name,//数组的name value: geoCoord.concat(data[i].value)//连接 }); } } return res; };
生成数据2的代码如下
var token='XIxs9YC0wXa86WfWQGBM89qyohwGoXkx';var url="http://api.map.baidu.com/geocoder/v2/?output=json&ak="+token+'&address=';//该数组为两个方法共同使用,以作测试var _test = [ {name: "齐齐哈尔", value: 9}, {name: "盐城", value: 12}, {name: "赤峰", value: 12}, {name: "青岛", value: 12}];var charData=[];for(var k = 0;k<_test.length;k++){ var m = _test[k].name; var j = _test[k].value; (function(m,j) { $.getJSON(url+m+'&callback=?',function(res){ if(res.status===0){ loc=res.result.location; charData.push({ name:m, value: [parseFloat((loc.lng).toFixed(2)),parseFloat((loc.lat).toFixed(2)),j] }); } else{ alert('百度没有找到地址信息'); } }) })(m,j)}
两组数据都是通过push空数组生成的,都在value上放置了一个含有三项数值的新数组,但是为什么打印结果不一样呢?
难道他们真的不一样?
解决方案
看不到代码里console.log,不知道你的打印时机,打印时机的不同,结果是有点怪异的,一般来说数组的话,你在打印它的时候,它的个数会显示和内容会简单的显示在第一行,但是点开箭头,才是数组的实时数据
我给你看个截图吧
第一次打印的时候a才两个元素,但是后面第二次打印之前我给a加了个元素,结果就不一样了。
点开的是实时数据,第一行显示的是当时的数据。
补充一点,那就是箭头实时数据点开的那一刻也是有讲究的,如果在a还没增加元素前提前点开了箭头,展示的数据,就固定在了当时点开时数组的实时数据……不好表达,看动图吧。第一个console跟后面几个的区别