首页 > 解决方案 > 如何从 JavaScript 中的两个二维数组中获取唯一值

问题描述

我正在尝试从两个数组中获取唯一值,如下所示:

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}]但它开始返回重复的三个元素时,它运行良好......我不知道有什么问题。

标签: javascriptarraysgoogle-sheets

解决方案


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

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

代码片段:

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);

推荐阅读