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

Resort multiple arrays into different arrays based on item's index value in JavaScript

本文关键字:数组 转换 索引值 item JavaScript      更新时间:2023-09-26

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

我需要能够做的是遍历对象中的每个数组,并根据其索引值将每个项目放在不同的数组中。因此,例如,obj(name[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和bnam0在同一个数组中,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 + "}, ");
            }

我是这么做的

首先创建示例对象:

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' ] }