Ваш код выполняет строгое сравнение элементов двух Array
с. Это нормально, в общем. Однако для этих конкретных Array
s эти элементы также Array
s, что означает, что строгое (не) равенство проверяет, чтобы увидеть, являются ли они точно такими же объектами массива в памяти. См. этот вопрос для получения дополнительной информации.
Вы, вероятно, хотели выполнить сравнение на основе значений, что означает, что вам нужно сравнить конкретный элемент этого внутреннего массива (то есть, снова индексировать). if (array2[i][0] !== array1[j][0]) {...}
проверит 1-й элемент внутреннего массива.
Глядя на создание экземпляров array1
и array2
, мы видим, что это действительно 2D-массивы из одного столбца Range
s, поэтому в каждом внутреннем будет только 1 элемент массив. Вы можете уменьшить необходимый уровень индексации, сгладив эти массивы при их чтении:
const array1 = sheet.getRange(...).getValues().map(function (row) { return row[0]; });
const array2 = ...;
Я также не уверен, почему вы передаете массивы Sheet#getRange
- вы должны передать 1-4 аргумента в соответствии с сигнатурами метода , подробно описанными в документации по скрипту приложения .
Обратите внимание, что есть намного лучшие алгоритмы для проверки, существует ли значение в данном массиве - вы повторно сканируете весь 2-й массив для каждого значения первого массива. Вам следует тщательно изучить эту тему, прежде чем задавать новый вопрос о том, как улучшить ваш алгоритм.
Наконец, вы должны реализовать лучший метод использования пакетных методов - вы в настоящее время вызываете setValue
в цикле. Подумайте о том, чтобы сохранить результаты для записи в массив, а затем записать с Range#setValues
после завершения цикла. На эту тему вы можете ознакомиться с большим количеством вопросов.