我有一个数组数组,每个数组对应于从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数组像这样分配?
谢谢!
答案 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
];
}