如何使用 Google Apps 脚本取消 table 的透视?
How to unpivot a table using Google Apps Script?
我在电子表格中有一个 table,我想使用 google 应用程序脚本取消透视:原始 table 的每个月行都必须变成多行新 table。问题是代码没有产生预期的结果。
创建这样结束的数组(table 的每一行以一个不同的月份结束):
[[...,'April'],[...,'September'],[...,'December']]
它正在生成这个(每行以原始 table 中该行的最后一个月的值结尾):
[[...,'December'],[...,'December'],[...,'December']]
有人能看出错误吗?
function myFunction() {
var ay_datos = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
['California', 'April', 'September', 'December', 3, ''],
['Texas', 'January', 'March', '', 2, ''],
];
var ay_new = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
];
for (i = 1; i < ay_datos.length; i++) {
var num_months = ay_datos[i][4];
var ay_linea = ay_datos[i];
for (j = 0; j < num_months; j++) {
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea);
}
}
}
您每次都在循环中推送同一个数组。对数组所做的任何修改都将反映在同一数组的所有引用上。使用slice复制一个数组:
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea.slice(0));
实时片段:
function myFunction() {
const ay_datos = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
['California', 'April', 'September', 'December', 3, ''],
['Texas', 'January', 'March', '', 2, ''],
];
const ay_new = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
];
for (let i = 1; i < ay_datos.length; i++) {
const num_months = ay_datos[i][4];
const ay_linea = ay_datos[i];
for (let j = 0; j < num_months; j++) {
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea.slice(0));
}
}
return ay_new;
}
console.log(myFunction());
我在电子表格中有一个 table,我想使用 google 应用程序脚本取消透视:原始 table 的每个月行都必须变成多行新 table。问题是代码没有产生预期的结果。
创建这样结束的数组(table 的每一行以一个不同的月份结束):
[[...,'April'],[...,'September'],[...,'December']]
它正在生成这个(每行以原始 table 中该行的最后一个月的值结尾):
[[...,'December'],[...,'December'],[...,'December']]
有人能看出错误吗?
function myFunction() {
var ay_datos = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
['California', 'April', 'September', 'December', 3, ''],
['Texas', 'January', 'March', '', 2, ''],
];
var ay_new = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
];
for (i = 1; i < ay_datos.length; i++) {
var num_months = ay_datos[i][4];
var ay_linea = ay_datos[i];
for (j = 0; j < num_months; j++) {
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea);
}
}
}
您每次都在循环中推送同一个数组。对数组所做的任何修改都将反映在同一数组的所有引用上。使用slice复制一个数组:
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea.slice(0));
实时片段:
function myFunction() {
const ay_datos = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
['California', 'April', 'September', 'December', 3, ''],
['Texas', 'January', 'March', '', 2, ''],
];
const ay_new = [
['State', 'Month1', 'Month2', 'Month3', 'Number of months', 'Month'],
];
for (let i = 1; i < ay_datos.length; i++) {
const num_months = ay_datos[i][4];
const ay_linea = ay_datos[i];
for (let j = 0; j < num_months; j++) {
ay_linea[5] = ay_linea[1 + j];
ay_new.push(ay_linea.slice(0));
}
}
return ay_new;
}
console.log(myFunction());