根据 JavaScript 中项目的索引值将多个数组重新组合成不同的数组
Resort multiple arrays into different arrays based on item's index value in JavaScript
我目前正在处理 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 与 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 + "}, ");
}
这是我所做的。
首先创建示例对象:
var obj = { array0: ['AName0', 'AName1', 'AName2', 'AName3'], array1: ['BName0', 'BName1', 'BName2']};
接下来我创建了一个函数(天真的方法),它接受对象和 returns 一个带有新数组的对象。
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))
returns对象内的预期结果
{ array_0: [ 'AName0', 'BName0' ],
array_1: [ 'BName1' ],
array_2: [ 'AName2', 'BName2' ],
array_3: [ 'AName3' ] }
我目前正在处理 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 与 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 + "}, ");
}
这是我所做的。
首先创建示例对象:
var obj = { array0: ['AName0', 'AName1', 'AName2', 'AName3'], array1: ['BName0', 'BName1', 'BName2']};
接下来我创建了一个函数(天真的方法),它接受对象和 returns 一个带有新数组的对象。
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))
returns对象内的预期结果
{ array_0: [ 'AName0', 'BName0' ],
array_1: [ 'BName1' ],
array_2: [ 'AName2', 'BName2' ],
array_3: [ 'AName3' ] }