【问题标题】:Last element doesn't include in variable by map from array最后一个元素不包含在数组中的映射变量中
【发布时间】:2021-09-09 06:17:20
【问题描述】:

通过映射从数组中获取值存在问题。

我在这个链接上有电子表格https://docs.google.com/spreadsheets/d/1LfbrGvX-ObolRnbTjh0VWGci4QlFBzyKpL34i5_cA9Y/edit#gid=1550082939

这里有两个模块。模块 globalVars 中的脚本运行良好,它正在获取全局变量和数组。

const url = SpreadsheetApp.getActiveSpreadsheet().getUrl();

let ss = SpreadsheetApp.openByUrl(url);
let shSISTEM = ss.getSheetByName("@sistem");

// SETTINGS LIST NAMES ->>>>>>>>>>>>>>>>>>>>>>>>
  const rngSISNMS = [
      'RTSout',
      'CAFin',
      'CAFout',
      'RTSin',
      'NameJSONS',      
      'NameTable',      
  ];

/////////////////////////////////////////////

// ARRAYS OF SISTEM TABLES
  let [arrRTSout, arrCAFin, arrCAFout, arrRTSin, arrJSONS] = rngSISNMS.map(rangeName => {
    return shSISTEM.getRange(rangeName).getDataRegion().getValues();
  });

问题出在具有函数 jobForWork 的模块 impJSONS 中。我有这个脚本:

function jobForWork(){

// Iamblichus code
  // const [nameJSON, turnON, nameTABLE, nameARR, nameDIR, idDIR] = arrJSONS[0].map((_, colIndex) => arrJSONS.map(row => row[colIndex]));

// my code
  for (var i = 0; i < arrJSONS.length; i ++){
    var j = 0;
    let [nameJSON, turnON, nameTABLE, nameARR, nameDIR, idDIR] = arrJSONS.map(() => {
      Logger.log(`element ${j}: ${arrJSONS[i][j]}`);
      let vOut = arrJSONS[i][j];
      j++;
      return vOut;
      });

    /// some opeartions with variables of i-elements in arrJSONS
    // ....outside functions with each i-elements
        if (nameJSON == "jobToRTS") start(nameDIR, idDIR);
        if (nameDIR == "IN_CAF") next(nameTABLE, nameARR);
        if (turnON) finish(nameJSON);
    /// ...

  }
}

该脚本适用于“T:Y”中表中的数组 arrJSONS。它通过 arrJSONS.map 将数组中的元素放入变量中,但它在元素 j = 4 处停止,仅此而已。所以数组的最后一个元素不包含在变量 idDIR 中。你能帮帮我吗?

【问题讨论】:

    标签: google-apps-script spreadsheet


    【解决方案1】:

    如果您只想遍历arrJSONS,并且对于每次迭代,您希望将内部数组中的每个单个值存储在不同的变量中,array destructuring 就足够了,您不需要map

    function jobForWork(){
      for (var i = 0; i < arrJSONS.length; i ++) {
        let [nameJSON, turnON, nameTABLE, nameARR, nameDIR, idDIR] = arrJSONS[i];
        // Do whatever you want with these variables
      }
    }
    

    【讨论】:

    • 谢谢。我必须如何将其包含在我的代码中?如果我对此进行更改,则每个变量都会再次获取所有数组...
    • @DmitriyRudakov 不需要for!你只需要这条线。看看我更新的答案
    • 我再次尝试不使用“for”。一样。每个变量都占用了所有数组。我需要“for”,因为我认为在每次迭代中使用每个变量,我计划为接下来的每个步骤构建一些程序......
    • @DmitriyRudakov Each variable took all the array 这是可能的。例如,使用我提供的代码,nameJSON 将返回一个数组,其中每个内部数组的索引为 0。使用您当前的数据,即[ 'INCL NAME', 'jobToRTS', 'jobToCAF', 'jobFromCAF', 'jobToRTS' ]。如果您在登录nameJSON 时得到不同的结果,则说明您没有使用我提供的代码。
    • 您的代码不起作用,我需要。我需要将数组 arrJSONS 的每个元素放在不同的变量中。您的代码将所有相同的数组放入 6 个变量中。
    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 2021-06-06
    • 2018-08-06
    • 2016-02-04
    • 2014-08-13
    • 2014-05-02
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多