Поскольку в Google Apps Script пока нет такой структуры данных, как HashSet , решить эту проблему довольно сложно. Вы можете выбрать квадратичное решение, которое для каждого элемента в первом диапазоне будет перебирать весь второй, пытаясь найти «совпадение», чтобы отбросить его. Это будет выглядеть как решение @Cooper.
В качестве альтернативы, и учитывая, что объекты скрипта Google Apps сохраняют порядок вставки свойств, вы можете использовать следующий код, который теоретически должен давать лучшие результаты производительности (особенно для большихрабочие нагрузки).
function DIFFERENCE(range1, range2) {
var o = {};
for (var i=0; i<range1.length; i++) {
for (var j=0; j<range1[0].length; j++) {
if (!o[range1[i][j]])
o[range1[i][j]] = true;
}
}
for (var i=0; i<range2.length; i++) {
for (var j=0; j<range2[0].length; j++) {
if (o[range2[i][j]])
o[range2[i][j]] = false;
}
}
return Object.keys(o).filter(function f(key) { return o[key]; }).map(function(res) { return parseFloat(res) });
}
Эта функция предполагает, что вы имеете дело с числами. Если вы хотите, чтобы он также работал со строками, вы можете заменить последнюю строку кода следующим: return Object.keys(o).filter(function f(key) { return o[key]; });
Вы также можете увидеть пару примеров здесь: