我终于为JS学习了更好的方法。我正试图找到一种比目前更快的方法:
在我的代码中,我有两个数组:
- 第一个位置有唯一键的
- 其中那些键在第一位置,但不是唯一的。有多个条目具有我要筛选的特定值
问题是我不想过滤第二个数组中的所有内容。我想选择一些职位,比如项目[1]+项目[5]+项目[6]。我所做的是有效的,但我想知道是否没有更快的方法?
for (let i=0;i<firstArrayOfUniques.length;i++){
const findRef = secondArrayOfMultiple
.filter(item => item[0]==firstArrayOfUniques[i][0]);
// Afterwards, I redo a map and select only the second element,
//then I join the multiple answers
// Is there a way to do all that in the first filter?
const refSliced = findRef.map(x=>x[1]);
const refJoin = refSliced.join(" - ");
canevasSheet.getRange(1+i,1).setValue(refJoin);
}
您引用的脚本片段将花费几乎所有的运行时间来调用Range.setValue()
方法。它会为每个数据行单独调用。使用Range.setValues()
,只调用一次,如下所示:
function moot(firstArrayOfUniques, secondArrayOfMultiple) {
const result = firstArrayOfUniques.map(uniqueRow =>
secondArrayOfMultiple
.filter(row => row[0] === uniqueRow[0])
.map(row => row[1])
.join(' - '));
canevasSheet.getRange(1, 1, result.length, result[0].length).setValues(result);
}
请参阅应用程序脚本最佳实践。