代码之家  ›  专栏  ›  技术社区  ›  KOsterhout

根据JavaScript中项的索引值将多个数组转换为不同的数组

  •  0
  • KOsterhout  · 技术社区  · 9 年前

    我目前正在处理传回的JSON数据。总之,我有多个数组,每个数组都有一个基于JSON对象中特定值的键,这些数组都放在一个JavaScript对象中。

    我需要做的是遍历对象中的每个数组,并根据其索引值将每个项放置在不同的数组中。因此,例如,需要将obj(名称[0])移植到数组中,例如array_0。其他数组需要以相同的方式排序。因此,obj(different_name[0])也需要放在array_0中。其他所有值也需要这样做。

    要说明结构:

    Obj {
       array0:
          [0]AName0
          [1]AName1
          [2]AName2
          [3]AName3
       array1:
          [0]BName0
          [1]BName1
          [2]Bname2
    }
    

    我需要AName0与BName0位于同一个数组中,AName1与BName1位于同一数组中,依此类推。我还需要动态创建这些数组,因为每次运行时数据都会不同(意味着数组中的数组和项目数量不同)。

    我试图实现的是动态创建图表。图表将有多个数据集,我需要根据传回的数据动态创建每个数据集。

    下面是一个jsFiddle,展示了图表的基本结构以及我正在努力实现的目标: https://jsfiddle.net/6m45LL77/

    下面是我如何将数据放入阵列中:

    for (var i = 0; i < data.Details.length; ++i) {
                    obj[data.Details[i].Name].push("{low: " + data.Details[i].GeolFrom + ", " +
                        "high: " + data.Details[i].GeolTo + ", " +
                        "field: " + data.Details[i].Name + "}, ");
    
                }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   manonthemat    9 年前

    这是我所做的。

    首先创建示例对象:

    var obj = { array0: ['AName0', 'AName1', 'AName2', 'AName3'], array1: ['BName0', 'BName1', 'BName2']};
    

    接下来,我创建了一个函数(朴素方法),它接受对象并返回一个带有新数组的对象。

    function transform(obj) {
      var keys = Object.keys(obj);
      var newObj = {};
      for (var k = 0; k < keys.length; k++) {
        var arr = obj[keys[k]];
        for (var i = 0; i < arr.length; i++) {
          var el = arr[i];
          if (el) {
            if (!newObj['array_' + i]) newObj['array_' + i] = [];
            newObj['array_' + i].push(el);
          }
        }
      }
      return newObj;
    }
    

    使用测试

    console.log(transform(obj))
    

    返回对象中的预期结果

    { array_0: [ 'AName0', 'BName0' ],
      array_1: [ 'BName1' ],
      array_2: [ 'AName2', 'BName2' ],
      array_3: [ 'AName3' ] }