如图所示,
两个一样的数组,为什么在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跟后面几个的区别