【问题标题】:Javascript: Array overriding the same values after assinging to JSON objectJavascript:数组在分配给 JSON 对象后覆盖相同的值
【发布时间】:2013-08-20 20:12:06
【问题描述】:

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

例如 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));

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

【问题讨论】:

  • 您遇到错误了吗?你没有提到你遇到了什么问题。
  • 没有得到任何错误,问题是ie的最后一个数组。 obj[2] 值被分配给所有 coord_set JSON 数组

标签: json jquery multidimensional-array


【解决方案1】:

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

  for(var j=0;j<obj.length;j++)
  { 
      coordinates = [];      // <----- add this
      for (var i=0;i<obj[j].length;i++)

【讨论】:

  • 别忘了把它设为局部变量,否则以后可能会有其他惊喜……
  • 非常感谢 ruakh!你的修复让我的一天......今天一整天都被困在这个......
【解决方案2】:

我会假设 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}
    

【讨论】:

  • 从 OP 发布的输出中,我假设 how_many 的东西实际上很好。复制对象的原因可能是 JSON 将各个值存储在包含名为 how_many 的字段的对象中,而 OP 只想要直接在 data 中的值。
猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 2010-09-29
  • 1970-01-01
  • 2015-04-06
  • 2013-05-11
  • 2015-11-09
  • 1970-01-01
  • 2016-12-15
相关资源
最近更新 更多