使用空的返回数组重组数组

时间:2018-10-16 18:51:26

标签: javascript arrays

我有一个数组数组,每个数组对应于从API中提取的不同值。我需要从旧数组创建一个新数组,并更改某些值的位置。

这是我到目前为止所拥有的(在一个需要一个名为worksheetArray的数组的函数中):

let ret = [];

let index = 0;
for (let element of worksheetArray) {
  ret[index][0] = ''; // Blank
  ret[index][1] = element[15] // Location
  ret[index][2] = element[0] // Team Name
  ret[index][3] = element[4] // Resource
  ret[index][4] = element[5].split(' ')[0] // From Date 
  ret[index][5] = element[5].split(' ')[1] // From Time
  ret[index][6] = element[6].split(' ')[0] // To Date
  ret[index][7] = element[6].split(' ')[1] // To Time  
}

这将返回错误:

TypeError: Cannot set property '0' of undefined

我在这里做错了什么?我如何让我的return数组像这样分配?

谢谢!

2 个答案:

答案 0 :(得分:2)

将新的子数组插入ret中,并在每个循环结束后递增索引:

let ret = [];

let index = 0;
for (let element of worksheetArray) {
  ret[index] = [];
  ret[index][0] = ''; // Blank
  ret[index][1] = element[15] // Location
  ret[index][2] = element[0] // Team Name
  ret[index][3] = element[4] // Resource
  ret[index][4] = element[5].split(' ')[0] // From Date 
  ret[index][5] = element[5].split(' ')[1] // From Time
  ret[index][6] = element[6].split(' ')[0] // To Date
  ret[index][7] = element[6].split(' ')[1] // To Time  
  index += 1;
}

一个更简单的解决方案是创建子数组,并推入单个表达式:

const ret = [];

for (let element of worksheetArray) {
  ret.push([
    '', // Blank
    element[15], // Location
    element[0], // Team Name
    element[4], // Resource
    element[5].split(' ')[0], // From Date 
    element[5].split(' ')[1], // From Time
    element[6].split(' ')[0], // To Date
    element[6].split(' ')[1] // To Time  
  ]);
}

或使用Array.map()

const ret = worksheetArray.map(element => [
  '', // Blank
  element[15], // Location
  element[0], // Team Name
  element[4], // Resource
  element[5].split(' ')[0], // From Date 
  element[5].split(' ')[1], // From Time
  element[6].split(' ')[0], // To Date
  element[6].split(' ')[1] // To Time  
]);

答案 1 :(得分:0)

您需要在数组内部使用嵌套索引的数组。

let ret = [[]];

或为索引分配一个数组

let ret = [];

let index = 0;
for (let element of worksheetArray) {
    ret[index] = [
        '', // Blank
        element[15] // Location
        element[0], // Team Name
        element[4], // Resource
        element[5].split(' ')[0], // From Date 
        element[5].split(' ')[1], // From Time
        element[6].split(' ')[0], // To Date
        element[6].split(' ')[1] // To Time  
    ];
}