繁体   English   中英

将数组推送到嵌套数组

[英]Push Array to Nested Array

我正在尝试将一个数组推入Google Apps脚本中的另一个数组。 我正在从电子表格(数组的数组)中提取数据,执行相对于另一个数组的匹配,然后希望将匹配中的相应值传递到新的数组中。 新数组必须具有与原始数组(数组数组)相同的结构。 我还没有运气得到那个结果。 我试图“推”匹配的数组,但是我得到了一个巨型数组或一个与原始数组结构不匹配的较小数组。 当我尝试使用基于原始数组循环的索引时,出现“ TypeError”。

  /*
    Step 1 - Read All Data Into An Array

  */

  //Gets Client Data For Each Firm
  mysheet = ss.getSheetByName(sheetNames[1]); //Adjusted worksheet
  ss.setActiveSheet(mysheet);
  arrInput = ss.getRangeByName(rngNameRawClientType).getValues(); 

  //Gets Client Classifcation and Score Data 
  mysheet = ss.getSheetByName(sheetNames[2]); //Data Validation worksheet
  ss.setActiveSheet(mysheet);
  arrClassification = ss.getRangeByName(rngNameClient).getValues();

  /*

    Step 2 - Perform Calculations on the Data

  */

   //Iterate Through Raw Data Input Array (Rows) 
   for(var r = 0; r < arrInput.length; r++) {

    //Iterate Through Column of Each Row
    for(var c = 0; c < arrInput[r].length; c++) {
       var strClientType = arrInput[r][c];

      //Compare To Classification Array - Return Corresponding Score
      var matchScores = [];
      for(var z = 0; z < arrClassification.length-1; z++) {
        if(arrClassification[z][0] === strClientType) {          
          //Add Score to Scores Array
          matchScores.push(arrClassification[z][1]);       
        }
      }
    }
     scores.push(matchScores);

您需要在两个for循环(scoreRow)之间创建一个空数组,并在每次增加c时将值推入该数组。 然后,每次您增加r scores.push(scoreRow)

for(var r = 0; r < arrInput.length; r++) {
  var scoreRow = []
  //Iterate Through Column of Each Row
  for(var c = 0; c < arrInput[r].length; c++) {
    var strClientType = arrInput[r][c];

    //Compare To Classification Array - Return Corresponding Score
    var matchScores = [];
    for(var z = 0; z < arrClassification.length-1; z++) {
      if(arrClassification[z][0] === strClientType) {          
        //Add Score to Scores Array
        matchScores.push(arrClassification[z][1]);       
      }
    }
    scoreRow.push(matchScores);
  }
  scores.push(scoreRow);
}

 const filterData = (data, filters) => data.map((column) => column.filter((row) => !filters.includes(row))) const inputData = [ ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c'] ] const inputFilters = ['b'] const output = filterData(inputData, inputFilters) console.log(output) 

我认为这就是您要寻找的。 它是用ES6语法编写的。

(箭头)函数 filterData接受两个参数,输入数据和已定义的过滤器。

由于以下原因,每次迭代中的数组映射都会返回一个新数组

由于以下原因, 数组过滤器返回新数组

数组包括filters调用的,以row作为参数

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM