【问题标题】:How to get unique values from two 2D arrays in JavaScript如何从 JavaScript 中的两个二维数组中获取唯一值
【发布时间】:2020-11-17 01:02:11
【问题描述】:

我正在尝试从两个看起来像这样的数组中获取唯一值:

array[{A,B,C},{C,D,E},{1,3,2},....]

两者看起来一样。

我尝试使用concat 和从循环中获取唯一值来添加它们。

所以我最终得到了这个:

    function uniqueValues() {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
        var srcSheet = ss.getSheetByName("arr1");
       const array1 = srcSheet.getRange(1, 1, srcSheet.getLastRow(), srcSheet.getLastColumn()).getValues();
       var srcSheet1 = ss.getSheetByName("arr2");
        const array2 = srcSheet1.getRange(1, 1, srcSheet1.getLastRow(), srcSheet1.getLastColumn()).getValues();
 
var dodaj = array1.concat(array2);
  
  
for (var i=0; i<dodaj.length; i++) {
    var listI = dodaj[i];
    loopJ: for (var j=0; j<dodaj.length; j++) {
        var listJ = dodaj[j];
        if (listI === listJ) continue; 
        for (var k=listJ.length; k>=0; k--) {
            if (listJ[k] !== listI[k]) continue loopJ;
        }
        
        dodaj.splice(j, 1);
    }
}
  
  var result = ss.getSheetByName("test").getRange(2, 5, dodaj.length, 3).setValues(dodaj);
  //Logger.log(dodaj);
}

当数组看起来像这样 array[{A,B},{C,D}] 但它开始返回重复的三个元素时,它运行良好......我不知道有什么问题。

【问题讨论】:

  • 我认为提供您期望的示例输入和输出值将帮助用户了解您当前的脚本问题并思考解决方案。
  • 一开始您在谈论 2 个值数组,然后您提供 1 个数组 array[{A,B,C},{C,D,E},{1,3,2},....] 作为输入。请使用有效输入和预期输出更新问题。

标签: javascript arrays google-sheets


【解决方案1】:

如果我理解正确,您想从 arr1arr2 的值中检索唯一行。也就是说,你想从dodaj中删除重复的内部数组。

使用concat 合并两个数组后,您可以执行以下操作:

代码sn-p:

var dodaj = array1.concat(array2);
dodaj = [...new Set(dodaj.map(JSON.stringify))].map(JSON.parse);
var result = ss.getSheetByName("test").getRange(2, 5, dodaj.length, dodaj[0].length).setValues(dodaj);

【讨论】:

  • 完美运行!我不知道它可以只用一行来解决。非常感谢,如果我没有具体说明我的目标,我们深表歉意。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
相关资源
最近更新 更多