从另一个元素数组中筛选一个数组并返回特定位置



我终于为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);
}

请参阅应用程序脚本最佳实践。

相关内容

  • 没有找到相关文章

最新更新