最后一个元素不包含在数组映射的变量中
Last element doesn't include in variable by map from array
通过映射从数组中获取值时出现问题。
我有关于此的电子表格 link 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”中 table 的数组 arrJSONS。它通过 arrJSONS.map 将数组中的元素放入变量,但它在元素 j = 4 处停止,仅此而已。所以数组的最后一个元素不包含在变量 idDIR 中。你能帮帮我吗?
如果您只想遍历 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
}
}
通过映射从数组中获取值时出现问题。
我有关于此的电子表格 link 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”中 table 的数组 arrJSONS。它通过 arrJSONS.map 将数组中的元素放入变量,但它在元素 j = 4 处停止,仅此而已。所以数组的最后一个元素不包含在变量 idDIR 中。你能帮帮我吗?
如果您只想遍历 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
}
}