javascript - 如何从 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}]
但它开始返回重复的三个元素时,它运行良好......我不知道有什么问题。
解决方案
如果我理解正确,您想从 和 中的值中检索唯一arr1
行arr2
。也就是说,您要从中删除重复的内部数组dodaj
。
使用concat合并两个数组后,您可以执行以下操作:
- 使用JSON.stringify()将每个内部数组转换为字符串,以便在不遍历它们的情况下比较它们。
- 使用Set构造函数和展开语法以删除重复的字符串(请参阅此答案)。
- 使用JSON.parse()将字符串转换回数组。
代码片段:
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);