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

hyrbngr7  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(350)

我终于学会了更好的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);
  }
tzxcd3kk

tzxcd3kk1#

您引用的脚本片段将花费几乎所有的运行时间调用 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);
}

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

相关问题