2

我正在使用 jquery ajax 并且 ajax 响应是多维 json 数组,我将 JSON 值分配给coordinates数组,然后将coordinates数组分配给新的 JSON coord_set,在将所有值分配给之后coord_set,它需要最后一个数组值,

例如 JSON 结果包含以下值

obj[0]={125, 343, 456, 453},
obj[1]={345, 657, 234, 787},
obj[2]={980, 677, 657, 568}

在分配给新的 JSON 之后,值是:

coord_set[0] = {
                    fillColor : 'rgba(255, 234, 111 ,0.5)', 
                    data : [980, 677, 657, 568]
               }
coord_set[1] = {
                    fillColor : 'rgba(255, 234, 111 ,0.5)', 
                    data : [980, 677, 657, 568]
               }
coord_set[2] = {
                    fillColor : 'rgba(255, 234, 111 ,0.5)', 
                    data : [980, 677, 657, 568]
               } 

这是我的代码:

  var obj = JSON.parse(data);
  for(var j=0;j<obj.length;j++)
  { 
      for (var i=0;i<obj[j].length;i++)
      {
                  coordinates[i] = obj[j][i].how_many;
      }

      coord_set[j] = { fillColor : 'rgba(255, 234, 111 ,0.5)', data : coordinates };
  }
  alert(JSON.stringify(coord_set));

请告诉我,如果我在代码中做错了什么?

4

2 回答 2

2

问题是您使用的是单个coordinates数组。您不断设置和重新设置同一个数组中的值,并且不断将同一个数组存储在coord_set. 要解决此问题,您只需coordinates在每次通过外循环时使用一个新数组:

  for(var j=0;j<obj.length;j++)
  { 
      coordinates = [];      // <----- add this
      for (var i=0;i<obj[j].length;i++)
于 2013-08-19T05:40:48.350 回答
0

我会假设 JSON.parse 确实有效......但既然你说你正在使用 jquery,我会使用http://api.jquery.com/jQuery.parseJSON/个人......

关于您的代码的几件事:

  • 您永远不会为坐标创建新对象,默认情况下,坐标是 JS 中的全局变量。您必须键入:

    var coordinates = []; // before the for (var i = 0; ...
    
  • 这个属性“how_many”来自哪里?我在您的第一个代码块中没有看到它...您的 i 循环中的代码应该是:

    coordinates[i] = obj[j][i];
    
  • 最后,你为什么还需要这个瞬态对象的副本呢?那应该这样做:

    coord_set[j] = { fillColor : 'rgba(255, 234, 111 ,0.5)', data : obj[j] };
    // if you change your result set to give a code like that:
    obj[0]= [ 125, 343, 456, 453 ] // and not: obj[0]={125, 343, 456, 453}
    
于 2013-08-19T05:40:15.893 回答