Javascript 给定两个数组,如何迭代其中一个数组并推送到第二个数组的重复元素?

Javascript 给定两个数组,如何迭代其中一个数组并推送到第二个数组的重复元素?,javascript,arrays,google-apps-script,unpivot,Javascript,Arrays,Google Apps Script,Unpivot,我正在编写一个google应用程序脚本,用于在一个包含行的工作表中执行以下操作: StudentName, StudentID, Gender, CoursePreference1, CoursePreference2, CoursePreference 3 和输出: StudentName, StudentID, Gender, CoursePreference1 StudentName, StudentID, Gender, CoursePreference2 StudentName, S

我正在编写一个google应用程序脚本,用于在一个包含行的工作表中执行以下操作:

StudentName, StudentID, Gender, CoursePreference1, CoursePreference2, CoursePreference 3
和输出:

StudentName, StudentID, Gender, CoursePreference1
StudentName, StudentID, Gender, CoursePreference2
StudentName, StudentID, Gender, CoursePreference3
我正在转换格式,这样就不用为每个学生一行,为他们的每个偏好设置一列,而是为每个课程偏好设置一行,并重复学生信息

我曾尝试使用嵌套for循环和map方法的其他答案来找到我要去的地方,但我完全陷入了困境

我的前半段代码设置了两个数组,效果很好;studentInfo的每个元素将针对courseInfo相关索引的每个元素重复:

function requestFileConversion() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var input = ss.getSheetByName('Input');
  var output = ss.getSheetByName("Output");

  output.getRange('A2:I').clearContent();
  output.getRange('A2:I').setNumberFormat('@STRING@');

  var studentInfo = input.getRange(2, 1, input.getLastRow() - 1, 8).getValues();
  var courseInfo = input.getRange(2, 9, input.getLastRow() - 1, 23).getValues();

  var appendValues = [];
然后下半场我就崩溃了;我的完全非功能性尝试如下所示:

 for (var i=0; i < courseInfo.length; i++) {
    var requestCollection = [];
    for (var j=0; j < courseInfo[i].length; j++) {
      requestCollection.push(studentInfo[i] + courseInfo[j]);
    };

if (requestCollection.length > 0) {
Array.prototype.push.apply(appendValues, requestCollection);
};
};
并制作:

Jenny, id100, F, English
Jenny, id100, F, Science
Jenny, id100, F, Math
Jenny, id100, F, Physics
Johnny, id101, M, Science
Johnny, id101, M, Sports
Johnny, id101, M, Gym
Johnny, id101, M, English
您可以使用和操作,然后映射以重新组合

数据=[
['Jenny','id100','F','English','Science','Math','Physics'],
['Johnny','id101','M','Science','Sports','Gym','English']
];
结果=[];
data.map(行=>{
变量[姓名、id、性别,…首选项]=行;
prefs.map((x)=>result.push([name,id,gender,x]);
})
控制台日志(结果)您可以使用and操作,然后映射到重新组合

数据=[
['Jenny','id100','F','English','Science','Math','Physics'],
['Johnny','id101','M','Science','Sports','Gym','English']
];
结果=[];
data.map(行=>{
变量[姓名、id、性别,…首选项]=行;
prefs.map((x)=>result.push([name,id,gender,x]);
})
控制台日志(结果)请尝试以下操作:

function addingRows() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(2, 1, sh.getLastRow()-1,sh.getLastColumn());
  var vA=rg.getValues();
  var vB=[];
  for(var i=0;i<vA.length;i++) {
    vt=vA[i].slice(3);
    for(var j=0;j<vt.length;j++) {
      vB.push([vA[i][0],vA[i][1],vA[i][2],vt[j]])
    }
  }
  var osh=ss.getSheetByName('Sheet2');
  osh.appendRow(['Name','ID','Gender','Course']);
  osh.getRange(2,1,vB.length,4).setValues(vB);
}
函数addingRows(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var vA=rg.getValues();
var vB=[];
对于(var i=0;i尝试以下方法:

function addingRows() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(2, 1, sh.getLastRow()-1,sh.getLastColumn());
  var vA=rg.getValues();
  var vB=[];
  for(var i=0;i<vA.length;i++) {
    vt=vA[i].slice(3);
    for(var j=0;j<vt.length;j++) {
      vB.push([vA[i][0],vA[i][1],vA[i][2],vt[j]])
    }
  }
  var osh=ss.getSheetByName('Sheet2');
  osh.appendRow(['Name','ID','Gender','Course']);
  osh.getRange(2,1,vB.length,4).setValues(vB);
}
函数addingRows(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var vA=rg.getValues();
var vB=[];

对于(var i=0;我为我糟糕的英语技能道歉。我无法理解
studentInfo
courseInfo
Jenny、id100、F、英语、科学、数学、物理
的值之间的关系。为了正确理解你的情况,你能提供一个示例电子表格吗?当然,请删除你的个人信息。我为我糟糕的英语技能道歉。我无法理解
studentInfo
courseInfo
Jenny,id100,F,English,Science,Math,Physics
的值之间的关系。为了正确理解你的情况,你能提供一个电子表格样本吗?当然,请emove您的个人信息。我不认为谷歌应用程序脚本支持地图中的箭头操作符。非常感谢您的帮助!我在Gsheets中使用了更保守的方法,但我在第一版中学到了很多,因为我没有使用箭头操作符的任何经验。这非常有效,我能够将其调整到精确的位置这是我所需要的!再次感谢!我认为谷歌应用程序脚本不支持地图中的箭头操作符。非常感谢你的帮助!我在Gsheets中使用了更保守的方法,但我学到了很多,但通过第一个版本,因为我没有任何箭头操作符的经验。这非常有效,我能够完全适应它我需要什么!再次感谢!