Javascript 如何更快地推进阵列在阵列中的位置
我有一个数组形式的谷歌电子表格数据。现在我想推我用于循环的数组位置,它在小数据上工作良好,但当数据长度增加时,它会导致延迟。 是否有更快的方法推动阵列在阵列中的位置 以下是我当前使用的代码:-Javascript 如何更快地推进阵列在阵列中的位置,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,我有一个数组形式的谷歌电子表格数据。现在我想推我用于循环的数组位置,它在小数据上工作良好,但当数据长度增加时,它会导致延迟。 是否有更快的方法推动阵列在阵列中的位置 以下是我当前使用的代码:- var ss = SpreadsheetApp.openById('19zxxxxxxxxxxxxxxxxxxxxxxxxOI'); var sheet1 = ss.getSheetByName('Sheet2'); var data = sheet1.getRange("A:H").getValu
var ss = SpreadsheetApp.openById('19zxxxxxxxxxxxxxxxxxxxxxxxxOI');
var sheet1 = ss.getSheetByName('Sheet2');
var data = sheet1.getRange("A:H").getValues();
var email = Session.getActiveUser().getEmail();
for(var i = 0; i < data.length; i++)
{
data.unshift(i+1);
} // this for loop takes too much time.
data = data.filter(function(item){return item[7] == email});
var x = data.map(function(val){
return val.slice(0, -7);
})
Logger.log(x)
return x;
}
var ss=SpreadsheetApp.openById('19ZXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
var sheet1=ss.getSheetByName('Sheet2');
var data=sheet1.getRange(“A:H”).getValues();
var email=Session.getActiveUser().getEmail();
对于(变量i=0;i
我相信你的目标如下
- 如果
是data.unshift(i+1)
as,则当列“G”的值与data[i].unshift(i+1)
相同时,您希望检索列“A”的值。此时,您希望将行号添加到行值的第一个索引中。email
- 根据你的剧本,我是这样理解的
- 您希望降低这种情况下的流程成本
电子邮件
,可以减少基础数据的大小。每一个值都是通过一个使用API表的API调用来检索的
示例脚本:
在使用此脚本之前
- 如果
包含在其他字符串中,请使用email
进行文本查找matchEntireCell(true)
- 你是说
数据[i]。取消移位(i+1)
?啊,对了!!,但是如果排成千行的话,它可能会再次延迟。我想我没能把它放进去。谢谢。当前作业在2秒内完成,有没有更快的方法?先过滤
,然后取消移位
/unshift inside map,然后再切片取消移位inside filter<代码>数据.filter((项目,i)=>项目[7]==电子邮件和项目.unshift(i+1))代码>你们提供在线课程吗?我想成为你的学生。我如何与您联系?是的,您的回答将时间消耗从2.08秒减少到1.2秒。但是请为将来提供您的邮件地址。@Mask:虽然我们不能阻止人们交换联系方式,但堆栈溢出的目的是为将来的读者保留一个写得很好的问题和答案的目录,而私人支持渠道往往会与此相反。我的经验是,私人支持可能会给帮手带来很大的负担,并且会占用以前帮助更多人的时间。当然,我将来会处理好这件事。
function myFunction() {
var ss = SpreadsheetApp.openById('19zxxxxxxxxxxxxxxxxxxxxxxxxOI');
var sheet1 = ss.getSheetByName('Sheet2');
var data = sheet1.getRange("A1:H" + sheet1.getLastRow()).getValues(); // Modified
var email = Session.getActiveUser().getEmail();
const res = data.reduce((ar, [a,,,,,,g], i) => { // Modified
if (g == email) ar.push([i + 1, a]);
return ar;
}, []);
Logger.log(res)
return res;
}
function myFunction() {
const spreadsheetId = '19zxxxxxxxxxxxxxxxxxxxxxxxxOI';
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName('Sheet2');
const email = Session.getActiveUser().getEmail();
// 1. Retrieve the ranges of rows by searching "email" at the column "G".
const ranges = sheet.getRange("G1:G" + sheet.getLastRow()).createTextFinder(email).findAll();
// 2. Create an object for using with Sheets API.
const reqs = ranges.reduce((o, e) => {
const row = e.getRow();
o.rows.push(row);
o.ranges.push("A" + row);
return o;
}, {rows: [], ranges: []});
// 3. Retrieve values and add the row number.
const res = Sheets.Spreadsheets.Values.batchGet(spreadsheetId, {ranges: reqs.ranges})
.valueRanges
.map((e, i) => ([reqs.rows[i], e.values[0][0]]));
Logger.log(res)
return res;
}