グスタボ・リタ:
元のテーブルの月の列のそれぞれは、新しいテーブルの複数の行になることがあります。私はグーグルを使ってアンピボットしたいスプレッドシートの表は、スクリプトをアプリがあります。問題は、コードが期待される結果が得られないです。
このような端部(一方の異なる月持つテーブル端部の各行)はアレイの作成Insted。
[[...,'April'],[...,'September'],[...,'December']]
これは、この(元の表のその行の最後の月の値を持つ各ライン終了)の製造です。
[[...,'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);
}
}
}
それらアスター:
あなたは、ループ内で同じ配列を毎回押しています。配列に行われた修正は、同じ配列のすべての参照に反映されます。使用するスライスを、配列をコピーします:
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());