我试图从googlespreadsheet api的json对象中建立一个新的数组。
我得到的结果是这样的。
valueRanges:
0:
values:
0:
0: Tuesday May 12
1:
0: ''
1: ''
2: ''
3: 'Person 1'
4: 'Person 2'
2:
0: '00:00'
1: 'till'
2: '01:00'
3: 'name 1'
4: 'name 2'
3:
0: '01:00'
1: 'till'
2: '02:00'
3: 'another name 1'
4: 'another name 2'
4:
...
1:
values:
0:
.....
我希望新的数组是这样的:
[{
date: 'Tuesday May 12,
header: true,
subitems: [{
0: {
time: '',
person1: 'Person 1',
person2: 'Person 2'
}
1: {
time: '00:00 till 01:00',
person1: 'Name 1',
person2: 'Name 2'
}
2: {
time: '01:00 till 02:00',
person1: 'Another Name 1',
person2: 'Another Name 2'
}
}]
}]
我知道如何把时间从3列变成1个字符串,所以这不是问题。
我目前用来创建数组的代码如下。
fetch(url)
.then((response) => response.json())
.then((response) => {
const data = [];
for (let i = 0; i < response.valueRanges.length; i++) {
const data = [{
'date': response.valueRanges[i].values[0][0],
'header':true,
}];
for (let j = 0; j < response.valueRanges[i].values.length; j++) {
if (j == 0) {
continue;
}
const time = [response.valueRanges[i].values[j][0],response.valueRanges[i].values[j][1],response.valueRanges[i].values[j][2]];
const array2 = [
{
'subitems': {
'time': time.join(' '),
'person1': response.valueRanges[i].values[j][3],
'person2':response.valueRanges[i].values[j][4]
}
}
]
}
data.push(array2);
}
但我没有得到正确的数组
已编辑
这是我得到的。
[ { date: 'Tuesday May 12', header: true } ]
[ { subitems: { time: '', person1: 'Persoon 1', person2: 'Persoon 2' } } ]
[ { subitems:
{ time: '00:00 tot 01:00',
person1: 'Name 1',
person2: 'Name 2' } } ]
[ { subitems:
{ time: '01:00 tot 02:00',
person1: 'Another name 1',
person2: 'Another name 2' } } ]
我错过了什么?
额外问题
而如果我想把新的数组改成下面的呢。
[
{
date: 'Tuesday May 12,
header: true
}
{
time: '',
person1: 'Person 1',
person2: 'Person 2'
}
{
time: '00:00 till 01:00',
person1: 'Name 1',
person2: 'Name 2'
}
{
time: '01:00 till 02:00',
person1: 'Another Name 1',
person2: 'Another Name 2'
}
]
基本上就是去掉子项,然后根据日期重复整个区块。
所以有两点。
fetch(url)
.then((response) => response.json())
.then((response) => {
for (let i = 0; i < response.valueRanges.length; i++) {
const data = {
date: response.valueRanges[i].values[0][0],
header: true,
subitems: []
};
for (let j = 0; j < response.valueRanges[i].values.length; j++) {
if (j == 0) {
continue;
}
const time = [response.valueRanges[i].values[j][0],response.valueRanges[i].values[j][1],response.valueRanges[i].values[j][2]];
const subitem = {
time: time.join(' '),
person1: response.valueRanges[i].values[j][3],
person2: response.valueRanges[i].values[j][4]
};
data.subitems.push(subitem);
}
}
一个对象的数组是 subitems
现在存储在 data
.
额外的问题。
fetch(url)
.then((response) => response.json())
.then((response) => {
for (let i = 0; i < response.valueRanges.length; i++) {
const data = [];
data.push({
date: response.valueRanges[i].values[0][0],
header: true
});
for (let j = 0; j < response.valueRanges[i].values.length; j++) {
if (j == 0) {
continue;
}
const time = [response.valueRanges[i].values[j][0],response.valueRanges[i].values[j][1],response.valueRanges[i].values[j][2]];
const subitem = {
time: time.join(' '),
person1: response.valueRanges[i].values[j][3],
person2: response.valueRanges[i].values[j][4]
};
data.push(subitem);
}
}
你需要修改一下代码 这里是更新后的代码...
const outerdata = [];
const innerdata = [];
for (let i = 0; i < response.valueRanges.length; i++) {
const data = [{
'date': response.valueRanges[i].values[0][0],
'header':true,
'subitems': []
}];
for (let j = 0; j < response.valueRanges[i].values.length; j++) {
if (j == 0) {
continue;
}
const time = [response.valueRanges[i].values[j][0],response.valueRanges[i].values[j][1],response.valueRanges[i].values[j][2]];
const subitems = {
'time': time.join(' '),
'person1': response.valueRanges[i].values[j][3],
'person2':response.valueRanges[i].values[j][4]
}
innerdata.push(subitems);
}
data.subitems = innerdata
outerdata.push(data);
}
快速回顾一下我做的改动。
声明2个数组分别存放主数组和内部子项目数组。
const outerdata = [];
const innerdata = [];
子项目数组应该在内循环中形成,主数组在外循环中形成。
在内循环中形成的子项目数组应附加到主数组的元素上。
data.subitems = innerdata
希望对大家有所帮助。祝你编码愉快!