Javascript:数组在赋值给JSON对象后重写相同的值

Javascript:数组在赋值给JSON对象后重写相同的值,json,jquery,multidimensional-array,Json,Jquery,Multidimensional Array,我正在使用jquery ajax&ajax响应是多维json数组,我将json值分配给坐标数组,然后将坐标数组分配给新的json坐标集,在将所有值分配给坐标集之后,将最后一个数组值分配给所有值 例如。 JSON结果包含以下值 obj[0]={125, 343, 456, 453}, obj[1]={345, 657, 234, 787}, obj[2]={980, 677, 657, 568} 分配到新JSON后,值为: coord_set[0] = {

我正在使用jquery ajax&ajax响应是多维json数组,我将json值分配给
坐标
数组,然后将
坐标
数组分配给新的json
坐标集
,在将所有值分配给
坐标集
之后,将最后一个数组值分配给所有值

例如。 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));
var obj=JSON.parse(数据);

对于(var j=0;j,我假设JSON.parse实际上可以工作……但是既然你说你在使用jquery,我个人会使用

关于代码的几点:

  • 您永远不会为坐标创建新对象,默认情况下,坐标是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}
    

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

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

for(var j=0;jar)您是否收到错误?您没有提到您遇到了什么问题。没有收到任何错误,问题是ie.obj[2]的最后一个数组值从OP发布的输出分配给所有coord_set JSON数组,我假设
how_many
的内容实际上没有问题。复制对象的原因可能是JSON将单个值存储在包含名为
how_many
的字段的对象中,而OP只希望直接输入值
数据
。别忘了将其设置为局部变量,否则,您以后可能会有其他惊喜…非常感谢ruakh!!!您的修复让我今天忙了一整天。。。。。